22 March 2015

MVC Interview Question in Dotnet

MVC Interview Question in Dotnet

1.     What is MVC ?
MVC is an architectural pattern which separates the representation and user interaction.
M - Model -  Application business logic is in the Model
V - View - Views represent the user interface, with which the end users interact.
C - Controller - Controller is the component that responds to user actions. Based on the user actions, the respective controller, work with the model, and selects a view to render that displays the user interface.

2. Advantages of MVC
1.     ASP.NET MVC views are light weight, as they do not use viewstate.
2.     Extensive support for TDD. With asp.net MVC, views can also be very easily unit tested.
3.     Complex application can be easily managed by the developer.
4.     In Razor view engine using a @ block is automatically HTML encoded to protect from cross site scripting (XSS) attacks.
5.     Bundling and minification improves load time by reducing the number of requests to the server and reducing the size of requested assets (such as CSS and JavaScript.). Bundling that makes it easy to combine or bundle multiple files into a single file.
6.     Minification performs a variety of different code optimizations to scripts or css, such as removing unnecessary whitespace and comments and shortening variable names to one character.
3. MVC Application Life cycle
MVC application life cycle has two main phases
Creating the request object and sending our response to the browser.
Creating the request Object
Step 1: Fill route : - MVC requests are mapped to route tables which in turn specify which controller and action to be invoked. So if the request is the first request the first thing is to fill the route table with routes collection. This filling of route table happens in the global.asax file.
Step 2: Depending on the URL sent “UrlRoutingModule” searches the route table to create “RouteData” object which has the details of which controller and action to invoke.
Step 3 Request context created: - The “RouteData” object is used to create the “RequestContext” object.
Step 4 Controller instance created: - This request object is sent to “MvcHandler” instance to create the controller class instance. Once the controller class object is created it calls the “Execute” method of the controller class.
Creating Response object: - This phase has two steps executing the action and finally sending the response as a result to the view.

4.Routing in MVC
Routing is a pattern matching system that monitor the incoming request and figure out what to do with that request. At runtime, Routing engine use the Route table for matching the incoming request's URL pattern against the URL patterns defined in the Route table. You can register one or more URL patterns to the Route table at Application_Start event.

routes.MapRoute(
               "View", // Route name
               "View/ViewCustomer/{id}", // URL with parameters
               new { controller = "Customer", action = "DisplayCustomer",
id = UrlParameter.Optional }); // Parameter defaults

The route mapping code is written in "RouteConfig.cs" file and registered using "global.asax" application start event.

5.HTML helpers in MVC
HTML helpers help you to render HTML controls in the view. For instance if you want to display a HTML textbox on the view , below is the HTML helper code.
Copy Code

<%= Html.TextBox("LastName") %>
6. Difference between HTML.TextBoxFor and HTML.TextBox
Both of them provide the same HTML output, “HTML.TextBoxFor” is strongly typed while “HTML.TextBox” isn’t
Html.TextBox("CustomerCode")
Html.TextBoxFor(m => m.CustomerCode)

7.Attribute based routing in MVC
This is a feature introduced in MVC 5. By using the "Route" attribute we can define the URL structure.
public class HomeController : Controller
{
       [Route("Users/about")]
       public ActionResult GotoAbout()
       {
           return View();
       }
}
Most of the time developers code in the action methods. Developers can see the URL structure right upfront rather than going to the “routeconfig.cs” and see the lengthy codes.

8. Navigate from one view to another using a hyperlink?
<%= Html.ActionLink("Home","Gotohome") %>
Home - Controller
Gotohome - Action

9. Restrict MVC actions to be invoked only by GET or POST
We can decorate the MVC action with the HttpGet or HttpPost attribute to restrict the type of HTTP calls. For instance you can see in the below code snippet the DisplayCustomer action can only be invoked by HttpGet. If we try to make HTTP POST on DisplayCustomer, it will throw an error.

[HttpGet]
public ViewResult DisplayCustomer(int id)
{
    Customer objCustomer = Customers[id];
    return View("DisplayCustomer",objCustomer);
}

10.ViewData, ViewBag and TempData

ASP.NET MVC offers us three options ViewData, ViewBag and TempData for passing data from controller to view and in next request. ViewData and ViewBag are almost similar and TempData performs additional responsibility.
Helps to maintain data when you move from controller to view.
ViewData requires typecasting for complex data type and check for null values to avoid error and ViewBag doesn’t require typecasting for complex data type.
ViewBag & ViewData Example:

public ActionResult Index()
                ViewBag.Name = "Arun Prakash";
                return View();   
}

public ActionResult Index() 
{
                ViewData["Name"] = "Arun Prakash";
                return View();
}

In View, we call like below:

@ViewBag.Name  
@ViewData["Name"]
TempData:

Helps to maintain data when you move from one controller to another controller or from one action to other action. In other words when you redirect, “Tempdata” helps to maintain data between those redirects. It internally uses session variables. TempData is meant to be a very short-lived instance, and you should only use it during the current and the subsequent requests only.

It requires typecasting for complex data type and check for null values to avoid error.
So if “TempData” is once read it will not be available in the subsequent request.

11.Partial views in MVC?
Partial view is a reusable view (like a user control) which can be embedded inside other view.

12.Validations in MVC?
Data annotations are nothing but attributes which can be applied on model properties.

Types
[Required]
[StringLength(50, MinimumLength = 2)]
[Range(15, 100)]

Data type
The data type annotation can be used to specify the data type for validation. The information may also be used as UI hint later in rendering process.
Copy Code

[Url]
public string url { get; set; }
[Phone]
public string phone { get; set; }
[DataType(DataType.Date)]
public DateTime updatedate { get; set; }

[DataType(DataType.PhoneNumber)]
public string phone { get; set; }
public class Customer
{
    [Required(ErrorMessage="Customer code is required")]
    public string CustomerCode
    {
        set;
        get;
    }
}

<% using (Html.BeginForm("PostCustomer", "Home", FormMethod.Post))
{ %>
<%=Html.TextBoxFor(m => m.CustomerCode)%>
<%=Html.ValidationMessageFor(m => m.CustomerCode)%>

<%}%>
Later in the controller we can check if the model is proper or not by using the ModelState.IsValid property and accordingly we can take actions.

public ActionResult PostCustomer(Customer obj)
{
    if (ModelState.IsValid)
    {
        obj.Save();
        return View("Thanks");
    }
    else
    {
        return View("Customer");
    }
}

13.Can we display all errors in one go?
Yes, we can; use the ValidationSummary method from the Html helper class.
<%= Html.ValidationSummary() %>

14. Ajax in MVC

Implement Ajax using Ajax libraries
function GetData()
{
                var url = "/MyAjax/getCustomer";
                $.post(url, function (data)
                {
                $("#txtCustomerCode").val(data.CustomerCode);
                $("#txtCustomerName").val(data.CustomerName);
                }
                )
}
implement AJAX by using the “AJAX” helper library


<%
   var AjaxOpt = new AjaxOptions{OnSuccess="OnSuccess"};                    
%>
<% using (Ajax.BeginForm("getCustomer","MyAjax",AjaxOpt)) { %>


<%} %>

15.Difference between ActionResult and ViewResult?

ActionResult is an abstract class while ViewResult derives from the ActionResult class.
ActionResult has several derived classes like ViewResult, JsonResult, FileStreamResult, and so on.
Depending on the flag (IsHtmlView) it will either return a ViewResult or JsonResult.

public ActionResult DynamicView()
{
   if (IsHtmlView)
                return View(); // returns simple ViewResult
   else
                return Json(); // returns JsonResult view
}

16.Different types of results in MVC?

There 12 kinds of results in MVC, at the top is the ActionResult class which is a base class that can have 11 subtypes as listed below:

                1.ViewResult - Renders a specified view to the response stream
                2.PartialViewResult - Renders a specified partial view to the response stream
                3.EmptyResult - An empty response is returned
                4.RedirectResult - Performs an HTTP redirection to a specified URL
                5.RedirectToRouteResult - Performs an HTTP redirection to a URL that is determined by the routing engine,  based on given route data
                6.JsonResult - Serializes a given ViewData object to JSON format
                7.JavaScriptResult - Returns a piece of JavaScript code that can be executed on the client
                8.ContentResult - Writes content to the response stream without requiring a view
                9.FileContentResult - Returns a file to the client
                10.FileStreamResult - Returns a file to the client, which is provided by a Stream
                11.FilePathResult - Returns a file to the client


17. Areas in MVC?
Group the  controller classes into logical section
18. MVC Scaffolding
Scaffolding is a technique in which the MVC template helps to auto-generate CRUD code. CRUD stands for create, read, update and delete.
19.Multiple Submit buttons pointing to multiple actions in a single MVC view
HTML Way








Ajax Way







20. MVC Ajax Example
//MVC JQuery Ajax

$('#learnitem-form').ajaxSubmit({

  data : {
          data1: data1,
          data2: data2,

         },

  success : function(result){
  //success
         },
  error : function(){
  //error
  }
});
20. MVC Action Filters
ASP.NET MVC provides Action Filters for executing filtering logic either before or after an action method is called. Action Filters are custom attributes that provide declarative means to add pre-action and post-action behavior to the controller's action methods.

Authorization filter, which makes security decisions about whether to execute an action method, such as performing authentication or validating properties of the request.

Action filter, which wraps the action method execution. This filter can perform additional processing, such as providing extra data to the action method, inspecting the return value, or canceling execution of the action method

OnActionExecuting - Runs before execution of Action method.
OnActionExecuted - Runs after execution of Action method.
OnResultExecuting - Runs before content is rendered to View.
OnResultExecuted - Runs after content is rendered to view.



Result filter, which wraps execution of the ActionResult object. This filter can perform additional processing of the result, such as modifying the HTTP response.

Exception filter, which executes if there is an unhandled exception thrown somewhere in action method, starting with the authorization filters and ending with the execution of the result. Exception filters can be used for tasks such as logging or displaying an error page.

21. MVC Custom Filters
When you request any page into MVC Application, it will go through the Routing Architecture. Your Routing system will decide your URL pattern. The default routing algorithm is like {controller}/ {action}/ {id} patterns. But it can be possible to change that pattern using Custom Routes.

When you create a Custom Route, you can also include route constraints. These constraints are used to restrict the requests to match routes. There are three basic types of constraints:

1.     Regular Expression Constraints - check the pattern of the Route and prevent invalid requests
2.     HttpMethod Constraints - You can match route with any type of the HTTP operation like POST, GET, etc. you want to prevent user to access particular URL when GET operation occurs but not POST operation occurs.
//Custom Route With HttpMethod Constraint
            routes.MapRoute(
                "HttpMethodConstraintRoute",
                "Blog/Insert",
                new { Controller = "Blog", action = "Insert" },
        new { method = new HttpMethodConstraint("GET") });

 3. CatchAllRoutes- Suitable for the dynamic URL, But if you want to match your URL, regardless of the number     of the segments for that, we have to create Catch-All Parameter.

22.Action Results - ActionResult method works as a return type of any controller method in the MVC. It acts like the base class of Result classes. It is used to return the models to the Views, file streams and also redirect to the controllers.
23.Razor View Engine VS Web Form(ASPX) View Engine

1.     Razor Engine is an advanced view engine that was introduced with MVC3.
Web Form Engine is the default view engine for the Asp.net MVC that is included with Asp.net MVC from the beginning.

             2. The file extensions used with Razor Engine are different from Web Form Engine. It has .cshtml (Razor
            with  C#) or .vbhtml (Razor with VB) extension for views, partial views, editor templates and for layout pages.

3. The file extensions used with Web Form Engine are also like Asp.net Web Forms. It has .aspx         extension     for  views, .ascx extension for partial views & editor templates and .master extension for layout/master pages.

               4. Razor has new and advance syntax that are compact, expressive and reduces typing.
               Web Form Engine has the same syntax like Asp.net Web Forms uses for .aspx pages.

5. Razor syntax are easy to learn and much clean than Web Form syntax. Razor uses @ symbol to make the code like as:
@Html.ActionLink("SignUp", "SignUp")
Web Form syntax are borrowed from Asp.net Web Forms syntax that are mixed with html and sometimes make a view messy. Webform uses <% and %> delimiters to make the code like as:
<%: Html.ActionLink("SignUp", "SignUp") %>

6.By default, Razor Engine prevents XSS attacks(Cross-Site Scripting Attacks) means it encodes the script or html tags like <,> before rendering to view.
Web Form Engine does not prevent XSS attacks means any script saved in the database will be fired while rendering the page

7. Razor Engine is little bit slow as compared to Webform Engine.
Web Form Engine is faster than Razor Engine.

8. Razor Engine, doesn't support design mode in visual studio means you cannot see your page look and feel.
Web Form engine support design mode in visual studio means you can see your page look and feel without running the application.

9. Razor Engine support TDD (Test Driven Development) since it is not depend on System.Web.UI.Page class.
Web Form Engine doesn't support TDD (Test Driven Development) since it depend on System.Web.UI.Page class which makes the testing complex.




13 comments:

  1. I think this is an great blogs. Such a very informative and creative contents. These concept is good for these knowledge.I like it and help me to development very well.Thank you for this brief explanations.
    Dot Net Training in Chennai

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.

    java training in omr

    java training in annanagar | java training in chennai

    java training in marathahalli | java training in btm layout

    java training in rajaji nagar | java training in jayanagar

    ReplyDelete
  4. Thank you for taking the time and sharing this information with us. It was indeed very helpful and insightful while being straight forward and to the point.

    MEAN stack training in Chennai

    MEAN stack training in bangalore

    MEAN stack training in tambaram

    MEAN stack training in annanagar

    MEAN stack training in Velachery

    MEAN stack training Sholinganallur

    ReplyDelete
  5. The knowledge of technology you have been sharing thorough this post is very much helpful to develop new idea. here by i also want to share this.
    Devops Training in pune|Devops training in tambaram|Devops training in velachery|Devops training in annanagar
    DevOps online Training

    ReplyDelete
  6. I found this informative and interesting blog so i think so its very useful and knowledge able.I would like to thank you for the efforts you have made in writing this article.
    python training in chennai
    python training in chennai
    python training in Bangalore

    ReplyDelete
  7. I am sure this post has helped me save many hours of browsing other related posts just to find what I was looking for. Many thanks!
    python training in velachery
    python training institute in chennai

    ReplyDelete
  8. Thanks for splitting your comprehension with us. It’s really useful to me & I hope it helps the people who in need of this vital information. 
    Devops Training in Chennai
    Devops training in sholinganallur
    Devops training in velachery
    Devops training in annanagar
    Devops training in tambaram

    ReplyDelete
  9. Hmm, it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well as an aspiring blog writer, but I’m still new to the whole thing. Do you have any recommendations for newbie blog writers? I’d appreciate it.
    Best Selenium Training in Chennai | Selenium Training Institute in Chennai | Besant Technologies


    ReplyDelete
  10. Hats off to your presence of mind. I really enjoyed reading your blog. I really appreciate your information which you shared with us.
    health and safrety courses in chennai

    ReplyDelete
  11. Thank you for taking the time and sharing this information with us. It was very helpful.
    Please visit us for MEAN Stack training in Pune

    ReplyDelete

Comments Welcome

Implementing OAuth validation in a Web API

 I mplementing OAuth validation in a Web API Implementing OAuth validation in a Web API using C# typically involves several key steps to sec...