What is MVC?
MVC is an architectural pattern which separates the representation and the user interaction. It’s divided in to three broader sections, “Model”, “View” and “Controller”. Below is how each one of them handles the task.
The “View” is responsible for look and feel.
“Model” represents the real world object and provides data to the “View”.
The “Controller” is responsible to take the end user request and load the appropriate “Model” and “View”.
Why MVC is Required?
As per me two needed things are reusability of a code behind logic and easiness of testing and maintainability.
The ASP.NET behind code is completely tied up with ASP.NET Httpcontext object which makes unit testing very difficult.
Just think how do I unit test the below behind ASP.NET code. How do I create a Http context object, how do I simulate the sender and eventargs objects of the button clicks etc.
MVC reduces the dependency between the components; this makes your code more testable.
MVC does not recommend use of server controls, hence the processing time required to generate HTML response is drastically reduced.
he integration of java script libraries like jQuery, Microsoft MVC becomes easy as compared to Web forms approach.
Is MVC suitable for both windows and web application?
MVC architecture is suited for web application than windows. For window application MVP i.e. “Model view presenter” is more applicable. If you are using WPF and MVVM is more suitable due to bindings.
What is difference between MVC (Model-View-Controller) and MVP (Model-View-Presenter)?
MVC has the controller handling the important work and all the request from the applications are coming directly to the controller. Whereas, MVP has the View as the handler and it handles the requests that are being generated.
What is the page lifecycle of an ASP.NET MVC?
The page lifecycle of ASP.NET MVC is having the following process and it is as follows:
What are the benefits of using MVC?
There are two big benefits of MVC:-
Separation of concerns is achieved as we are moving the code behind to a separate class file. By moving the binding code to a separate class file we can reuse the code to a great extent.
Automated UI testing is possible because now the behind code (UI interaction code) has moved to a simple.NET class. This gives us opportunity to write unit tests and automate manual testing.
Is MVC different from a 3 layered architecture?
MVC is an evolution of a 3 layered traditional architecture. Many components of 3 layered architecture are part of MVC. So below is how the mapping goes.
What is the latest version of MVC?
When this note was written, four versions where released of MVC. MVC 1 , MVC 2, MVC 3 and MVC 4. So the latest is MVC 5.
In which assembly is the MVC framework defined?
Is it possible to unit test an MVC application without running the controllers in an ASP.NET process?
Yes, all the features in an asp.net MVC application are interface based and hence mocking is much easier. So, we don't have to run the controllers in an ASP.NET process for unit testing.
What are 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.
We will get output like this.
What is the difference between “HTML.TextBox” vs “HTML.TextBoxFor”?
Both of them provide the same HTML output, “HTML.TextBoxFor” is strongly typed while “HTML.TextBox” isn’t.
Below is a simple HTML code which just creates a simple textbox with “CustomerCode” as name.
Below is “Html.TextBoxFor” code which creates HTML textbox using the property name ‘CustomerCode” from object “m”.
In the same way we have for other HTML controls like for checkbox we have “Html.CheckBox” and “Html.CheckBoxFor”.
What are routing in MVC?
Routing helps you to define user friendly URL structure and map those URL structure to the controller.
For instance let’s say we want that when any user type http://localhost/Person/name/” , it goes to the “Person” Controller and invokes “Search” action. This is defined by adding an entry in to the “routes” collection using the “maproute” function. Below is the under lined code which shows how the URL structure and mapping with controller and action is defined.
What is the significance of ASP.NET routing?
ASP.NET MVC uses ASP.NET routing, to map incoming browser requests to controller action methods. ASP.NET Routing makes use of route table. Route table is created when your web application first starts. The route table is present in the Global.asax file.
What are the 3 segments of the default route, that is present in an ASP.NET MVC application?
1st Segment - Controller Name
2nd Segment - Action Method Name
3rd Segment - Parameter that is passed to the action method
Where are the routing rules defined in an asp.net MVC application?
In Application_Start event in Global.asax
ASP.NET MVC application, makes use of settings at 2 places for routing to work correctly. What are these 2 places?
1. Web.Config File : ASP.NET routing has to be enabled here.
2. Global.asax File : The Route table is created in the application Start event handler, of the Global.asax file.
Can we map multiple URL’s to the same action?
Yes , you can , you just need to make two entries with different key names and specify the same controller and action.
How can we restrict MVC actions to be invoked only by GET or POST?
We can decorate the MVC action by “HttpGet” or “HttpPost” attribute to restrict the type of HTTP calls. For instance you can see in the below code snippet the “Create” action can only be invoked by “HttpGet”. If we try to make Http post on “Create” it will throw an error.
How can we maintain session in MVC?
Sessions can be maintained in MVC by 3 ways tempdata, viewdata and viewbag.
What is the difference between tempdata, viewdata and viewbag?
Temp data: -Helps to maintain data when you move from one controller to other 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.
View data: - Helps to maintain data when you move from controller to view.
View Bag: - It’s a dynamic wrapper around view data. When you use “Viewbag” type casting is not required. It uses the dynamic keyword internally.
What is life of “TempData” ?
“TempData” is available for the current request and in the subsequent request it’s available depending on whether “TempData” is read or not.
So if “TempData” is once read it will not be available in the subsequent request.
What is the use of Keep and Peek in “TempData”?
Once “TempData” is read in the current request it’s not available in the subsequent request. If we want “TempData” to be read and also available in the subsequent request then after reading we need to call “Keep” method as shown in the code below.
The more shortcut way of achieving the same is by using “Peek”. This function helps to read as well advices MVC to maintain “TempData” for the subsequent request.
What are partial views in MVC?
Partial view is a reusable view (like a user control) which can be embedded inside other view. For example let’s say all your pages of your site have a standard structure with left menu, header and footer as shown in the image below.
For every page you would like to reuse the left menu, header and footer controls. So you can go and create partial views for each of these items and then you call that partial view in the main view.
How did you create partial view and consume the same?
When you add a view to your project you need to check the “Create partial view” check box.
Once the partial view is created you can then call the partial view in the main view using “Html.RenderPartial” method as shown in the below code snippet.
How can we do validations in MVC?
One of the easy ways of doing validation in MVC is by using data annotations. Data annotations are nothing but attributes which you can be applied on the model properties. For example in the below code snippet we have a simple “customer” class with a property “customercode”.
This”CustomerCode” property is tagged with a “Required” data annotation attribute. In other words if this model is not provided customer code it will not accept the same.
In order to display the validation error message we need to use “ValidateMessageFor” method which belongs to the “Html” helper class.
Later in the controller we can check if the model is proper or not by using “ModelState.IsValid” property and accordingly we can take actions.
Can we display all errors in one go?
Yes we can, use “ValidationSummary” method from HTML helper class.
What are the other data annotation attributes for validation in MVC?
If you want to check string length, you can use “StringLength”.
In case you want to use regular expression, you can use “RegularExpression” attribute.
Some time you would like to compare value of one field with other field, we can use the “Compare” attribute.
In case you want to get a particular error message , you can use the “Errors” collection.
If you have created the model object yourself you can explicitly call “TryUpdateModel” in your controller to check if the object is valid or not.
In case you want add errors in the controller you can use “AddModelError” function.
How can we enable data annotation validation on client side?
It’s a two-step process first reference the necessary jQuery files.
Second step is to call“EnableClientValidation” method.
What is razor in MVC?
It’s a light weight view engine. Till MVC we had only one view type i.e.ASPX, Razor was introduced in MVC 3.
What are the 2 popular asp.net mvc view engines?
Why razor when we already had ASPX?
Razor is clean, lightweight and syntaxes are easy as compared to ASPX. For example in ASPX to display simple time we need to write.
So which is a better fit Razor or ASPX?
Microsoft razor is more preferred because it’s light weight and has simple syntaxes.
What symbol would you use to denote, the start of a code block in aspx views?
When using aspx view engine, to have a consistent look and feel, across all pages of the application, we can make use of asp.net master pages. What is asp.net master pages equivalent,
when using razor views?
To have a consistent look and feel when using razor views, we can make use of layout pages. Layout pages, reside in the shared folder, and are named as _Layout.cshtml
Explain the difference between layout and master pages ?
Layout are like master pages in ASP.NET Web form. Master pages give a standard look and feel for Web form views while layout gives standard look and feel or acts like a template for razor views.
How to apply layout to Razor views?
So first we need to create a template file as shown in the below code.
And then apply this template to the view as shown below and display data in those respective sections.
Explain the concept of Scaffolding?
Note :- Do not get scared with the word. Its actually a very simple thing.
Scaffolding is a technique in which the MVC template helps to auto-generate CRUD code. CRUD stands for create, read, update and delete.
So to generate code using scaffolding technique we need to select one of the types of templates (leave the empty one).
For instance if you choose “using Entity framework” template the following code is generated
It creates controller code, view and also table structure as shown in the below figure.
What does scaffolding use internally to connect to database?
It uses Entity framework internally.
How can you do authentication and authorization in MVC?
You can use windows or forms authentication for MVC.
How to implement windows authentication for MVC?
For windows authentication you need to go and modify the “web.config” file and set authentication mode to windows.
Then in the controller or on the action you can use the “Authorize” attribute which specifies which users have access to these controllers and actions. Below is the code snippet for the same. Now only the users specified in the controller and action can access the same.
How do you implement forms authentication in MVC?
Forms authentication is implemented the same way as we do in ASP.NET. So the first step is to set authentication mode equal to forms. The “loginUrl” points to a controller here rather than page.
We also need to create a controller where we will check the user is proper or not. If the user is proper we will set the cookie value.
All the other actions need to be attributed with “Authorize” attribute so that any unauthorized user if he makes a call to these controllers it will redirect to the controller ( in this case the controller is “Login”) which will do authentication.
How Ajax use in MVC?
Below is a simple sample of how to implement Ajax by using “Ajax” helper library. In the below code you can see we have a simple form which is created by using “Ajax.BeginForm” syntax. This form calls a controller action called as “getCustomer”. So now the submit action click will be an asynchronous ajax call.
In case you want to make ajax calls on hyperlink clicks you can use “Ajax.ActionLink” function as shown in the below code
So if you want to create Ajax asynchronous hyperlink by name “GetDate” which calls the “GetDate”
function on the controller , below is the code for the same. Once the controller responds this data is displayed in the HTML DIV tag by name “DateDiv”.
Below is the controller code. You can see how “GetDate” function has a pause of 10 seconds.
The second way of making Ajax call in MVC is by using Jquery. In the below code you can see we are making an ajax POST call to a URL “/MyAjax/getCustomer”. This is done by using “$.post”. All this logic is put in to a function called as “GetData” and you can make a call to the “GetData” function on a button or a hyper link click event as you want.
What kind of events can be tracked in AJAX ?
What is the difference between “ActionResult” and “ViewResult”?
“ActionResult” is an abstract class while “ViewResult” derives from “ActionResult” class. “ActionResult” has several derived classes like “ViewResult” ,”JsonResult” , “FileStreamResult” and so on.
“ActionResult” can be used to exploit polymorphism and dynamism. So if you are returning different types of view dynamically “ActionResult” is the best thing. For example in the below code snippet you can see we have a simple action called as “DynamicView”. Depending on the flag (“IsHtmlView”) it will either return “ViewResult” or “JsonResult”.
What are the different types of results in MVC?
There 12 kinds of results in MVC, at the top is “ActionResult”class which is a base class that can have 11 subtypes’sas listed below: -
“ActionFilters” helps you to perform logic while MVC action is executing or after a MVC action has executed.
Above is a some Acton filter type.
Action filters are useful in the following scenarios:-
Inline action filter.
Creating an “ActionFilter” attribute.
To create a inline action attribute we need to implement “IActionFilter” interface.The “IActionFilter” interface has two methods “OnActionExecuted” and “OnActionExecuting”. We can implement pre-processing logic or cancellation logic in these methods.
The problem with inline action attribute is that it cannot be reused across controllers. So we can convert the inline action filter to an action filter attribute. To create an action filter attribute we need to inherit from “ActionFilterAttribute” and implement “IActionFilter” interface as shown in the below code.
Later we can decorate the controllers on which we want the action attribute to execute. You can see in the below code I have decorated the “Default1Controller” with “MyActionAttribute” class which was created in the previous code.
If I have multiple filters impleted, what is the order in which these filters get executed?
1. Authorization filters
2. Action filters
3. Response filters
4. Exception filters
What are the different types of filters, in an asp.net mvc application?
1. Authorization filters
2. Action filters
3. Result filters
4. Exception filters
Give an example for Authorization filters in an asp.net mvc application?
Which filter executes first in an asp.net mvc application?
What are the levels at which filters can be applied in an asp.net mvc application?
1. Action Method
Is it possible to create a custom filter?
What filters are executed in the end?
Is it possible to cancel filter execution?
What type of filter does OutputCacheAttribute class represents?
How to send result back in JSON format in MVC?
In MVC we have “JsonResult” class by which we can return back data in JSON format. Below is a simple sample code which returns back “Customer” object in JSON format using “JsonResult”.
Below is the JSON output of the above code if you invoke the action via the browser.
What is “WebAPI”?
We are already familiar with SOAP based webservices and WCF
WEB API is actually a new kind of framework which is based on HTTP and it is behaving as a service
But here Microsoft is concentrating on being light weight and highly interoperable
It also has one great thing inside that – it can return xml and json both at a time based on client requirement
WEB API is a framework to build a web services on top of http .It can easily consume or produce JSON, XML etc
For satisfying the broad range of client “REST” was the proposed approach.
“WebAPI” is the technology by which you can expose data over HTTP following REST principles.
How does WCF differ from WEB API ?
With WCF also you can implement REST,So why "WebAPI"?
WCF was brought in to implement SOAP, never the intention was to implement REST."WebAPI'" is built from scratch and the only goal is to create HTTP services using REST. Due to the one point focus for creating “REST” service “WebAPI” is more preferred.
How to implement “WebAPI” in MVC?
Below are the steps to implement "webAPI" :-
Step1:-Create the project using the "WebAPI" template.
Step 2:- Once you have created the project you will notice that the controller now inherits from "ApiController" and you can now implement "post","get","put" and "delete" methods of HTTP protocol..
Step 3:-If you make a HTTP GET call you should get the below results.
How can we detect that a MVC controller is called by POST or GET ?
To detect if the call on the controller is “POST” action or a “GET” action we can use “Request.HttpMethod” property as shown in the below code snippet.
What is Bundling and minification in MVC?
Bundling and minification helps us to improve request load time of a page thus increasing performance.
How does bundling increase performance?
One for the “Index” page.
So how do we implement bundling in MVC ?
Open the “BundleConfig.cs” from the “App_Start” folder.
bundles.Add(new ScriptBundle("~/Scripts/MyScripts").Include( "~/Scripts/*.js"));
Below is how your “BundleConfig.cs” file will look like.
public class BundleConfig
public static void RegisterBundles(BundleCollection bundles
BundleTable.EnableOptimizations = true;
Once you have combined your scripts in to one single unit we then to include all the JS files in to the view using the below code. The below code needs to put in the ASPX or RAZOR view.
<%= Scripts.Render("~/Scripts/MyScripts") %>
If you now see your page requests you would see that script request is combined in to a one request.
How can you test bundling in debug mode ?
If you are in a debug mode you need to set “EnableOptimizations” to true in the “bundleconfig.cs” file or else you will not see the bundling effect in the page requests.
BundleTable.EnableOptimizations = true;
Explain minification and how to implement the same ?
// This is test var x = 0;
x = x + 1;
x = x * 2;
How to implement minification ?
When you implement bundling minification is implemented by itself. In other words steps to implement bundling and minification are same.
Explain the concept of View Model in MVC ?
A view model is a simple class which represents data to be displayed on the view.
For example below is a simple customer model object with “CustomerName” and “Amount” property.
CustomerViewModel obj = new CustomerViewModel();
obj.Customer.CustomerName = “priya";
obj.Customer.Amount = 1000;
But when this “Customer” model object is displayed on the MVC view it looks something as shown in the below figure. It has “CustomerName” , “Amount” plus “Customer Buying Level” fields on the view / screen. “Customer buying Level” is a color indication which indicates how aggressive the customer is buying.
“Customer buying level” color depends on the value of the “Amount property. If the amount is greater than 2000 then color is red , if amount is greater than 1500 then color is orange or else the color is yellow.
In other words “Customer buying level” is an extra property which is calculated on the basis of amount.
So the Customer viewmodel class has three properties
“TxtCustomerName” textbox takes data from “CustomerName” property as it is. “TxtAmount” textbox takes data from “Amount” property of model as it is.
“CustomerBuyingLevelColor” displays color value depending on the “Amount “ value.
How can we use two (multiple) models with a single view?
Let us first try to understand what the interviewer is asking. When we bind a model with a view we use the model drop down as shown in the below figure. In the below figure we can only select one model.
But what if we want to bind “Customer” as well as “Order” class to the view.
For that we need to create a view model which aggregates both the classes as shown in the below code. And then bind that view model with the view.
In the view we can refer both the model using the view model as shown in the below code.
What kind of logic view model class will have ?
As the name says view model this class has the gel code or connection code which connects the view and the model.
So the view model class can have following kind of logic's :-
Color transformation logic: - For example you have a “Grade” property in model and you would like your UI to display “red” color for high level grade, “yellow” color for low level grade and “green” color of ok grade.
Data format transformation logic :- Your model has a property “Status” with “Married” and “Unmarried” value. In the UI you would like to display it as a check box which is checked if “married” and unchecked if “unmarried”.
Aggregation logic: - You have two different Customer and Address model classes and you have view which displays both “Customer” and “Address” data on one go.
Structure downsizing: - You have “Customer” model with “customer Code” and “Customer Name” and you want to display just “Customer Name”. So you can create a wrapper around model and expose the necessary properties.
What is the use of “Allow HTML” and “Validate Input” attributes?
While working with MVC you may have noticed that MVC actions doesn’t allow posting HTML values . This is done to avoid cross site scripting security issues.Look at the following example where we are trying to post HTML to the MVC action.
But you can bypass this restriction by using one of the following 2 attributes
In other words the button is tied up with the “ShowAlert” action. It would be great if we could decouple the behavior from the button so that any other behavior can be attached with the button.
<input type="button" onclick="ShowAlert()" id="btn" />
Look at this button code you can see no action is attached with the below button element.
<input type="button" id="btn" />
var el = document.getElementById("btn"); el.onclick = ShowAlert;
With it you can make animations, games, cool effects, tools… You can turn a web page into a functional calculator or a game.
What does that mean?
Well, it could mean that the nice dropdown menu when clicked on … does nothing. Nothing at all.
It could mean that the contact form on your business site cannot be filled out.
It could mean that all kinds of crazy effects and functions your web designer has relied on to get your marketing message across and your product sold … are never seen by a whole bunch of people.
Explain the need of display mode in MVC?
Display mode displays views depending on the device the user has logged in with. So we can create different views for different devices and display mode will handle the rest.
For example we can create a view “index cshtml.” which will render for the desktop computers and index.mobile.cshtml for mobile devices. Now when an end user sends a request to the MVC application, display mode checks the “user agent” headers and renders the appropriate view to the device accordingly.
How can we validate using facebook or twitter accounts (MVC OAuth) ?
One of the most boring process for an end user is registering on a site. Sometimes those long forms and email validation just puts off the user. So how about making things easy by validating the users using their existing facebook / twitter / linkedin / etc accounts. So the user uses something which he already has while the site is assured that this user is a proper user.
This is achieved by using MVC OAuth (Open standard for authorization).
Using MVC Oauth is a three step process:-
Register your MVC application / website with the external site i.e. facebook , twitter etc. Once you register your app you get an ID and key from the external site. Below is snap shot of how facebook gives the ID and Key. In FB they term the key as the “App secret”. This process varies from site to site. So FB can have X steps while twitter can X+1.
Next step is to open “AuthConfig.cs” and you will see lot of readymade code to user your ID and Key. So use the appropriate method as per site and provide the ID and Key.
Now if you run your application you should get a link to FB login as shown in the below
screen. So if you login in FB
it will redirect to your MVC application.
What is DI in MVC?
It is based on separating component behavior from dependency resolution without object intervention.
The advantages of using the Dependency Injection are
Why Inject Controller Dependency?
You can create component directly inside the controller instead of inject them. In that case the controller will be strongly coupled on those components. If any component's implementation is changed or new version of that component is released then you must change controller class itself.
Another problem you will face when you will write unit test. You cannot run unit tests of those controllers independently (within isolation). You cannot take mocking features from unit testing framework. Without mocking, you cannot run unit test of your code in a isolated environment.
What is new in MVC 5 ?
Below are the new features in MVC 5 :-
Attribute based routing Asp.Net Identity
Bootstrap in the MVC template Authentication Filters
New Scaffolding system
We just sent you an email. Please click the link in the email to confirm your subscription!
OKSubscriptions powered by Strikingly