MVC Interview Questions
MVC Interview Questions
MVC is a framework for building web applications using an MVC (Model View Controller) design:
The Model represents the application core (for instance a list of database records).
The View displays the data (the database records).
The Controller handles the input (to the database records).
The MVC model also provides full control over HTML, CSS, and JavaScript.
MVC architecture represents the domain-specific data and business logic. It maintains the data of the
application, model data hold the data in public property.
Namespace mvc.Models
In Model, we can apply validation to the property using Data Annotation instead of applying on the client
side. For adding data Annotation we need to add the reference
“System.ComponentModel.DataAnnotations assembly”
[Display(Name=”StudentId ”)]
[Required(ErrorMessage=”StudentId is Required”)]
View : View is the User Interface where The user can display its own data and can modify its data, In
this, the data is passed from the model to the view. The view has a different folder with the same name as
of controller and has different views in it of different actions.
User View : To create this view use page template. The inherited class name will be available in
<%@ page directive with inherits attributes.
Master Page View : To create a master page view we use a template known as “MVC2 view
master page.it have a default extension of.master.
Partial View : Partial View is the same as UserController in asp.net it is inherited from the
System.Web.Mvc
Controller: It is the most essential part of the MVC in asp.net since it is the first recipient which interacts
with HTTP and finds the model and actions. So it is the controller which decides which model should be
selected and how to carry the data from the respective view, a controller is inherited from the
System.Mvc.Controller. The routing map of the controller is decided in RouteConfig.cs which is under
App Start Folder.
Eg, http://localhost:61465/Employee/Mark
Answer
The controller provides model data to the view, and interprets user actions such as button clicks. The
controller depends on the view and the model. In some cases, the controller and the view are the same
object.
The Controllers Folder contains the controller classes responsible for handling user input and
responses. MVC requires the name of all controllers to end with "Controller".
In our example, Visual Web Developer has created the following files: HomeController.cs (for the Home
and About pages) and AccountController.cs (For the Log On pages):
Learn more here - ASP.Net MVC Controller
Answer
The model represents the data, and does nothing else. The model does NOT depend on the controller or
the view. The MVC Model contains all application logic (business logic, validation logic, and data access
logic), except pure view and controller logic. With MVC, models both hold and manipulate application
data.
The Models Folder contains the classes that represent the application model.
Visual Web Developer automatically creates an AccountModels.cs file that contains the models for
application security.
Answer
A view is responsible for displaying all of, or a portion of, data for users. In simple terms, whatever we
see on the output screen is a view.
The Views folder contains one folder for each controller. Visual Web Developer has created an Account
folder, a Home folder, and a Shared folder (inside the Views folder). The Account folder contains pages
for registering and logging in to user accounts. The Home folder is used for storing application pages like
the home page and the about page. The Shared folder is used to store views shared between controllers
(master pages and layout pages).
Control: This component takes care of the consistency and uniformity between the abstraction
within the system along with their presentation to the user. It is also responsible for
communicating with all other controls within the MVC system.
Abstraction: This component deals with the functionality of the business domain within the
application.
viewdata
view bag
Explain in brief the difference between adding routes in a webform application & an MVC
application?
We make use of the MapPageRoute() which is of the RouteCollection class for adding routes in a
webform application. Whereas, the MapRoute() method is used for adding routes to an MVC application.
Due to the separation of the model from the view, the user interface can display multiple views of the
same data at the same time.
Change Accommodation
User interfaces tend to change more frequently than business rules (different colors, fonts, screen layouts,
and levels of support for new devices such as cell phones or PDAs) because the model does not depend
on the views, adding new types of views to the system generally does not affect the model. As a result,
the scope of change is confined to the view.
Separation of Concerns is one of the core advantages of ASP.NET MVC. The MVC framework provides
a clean separation of the UI, Business Logic, Model or Data.
More Control
The ASP.NET MVC framework provides more control over HTML, JavaScript, and CSS than the
traditional Web Forms.
Testability
ASP.NET MVC framework provides better testability of the Web Application and good support for test
driven development too.
Lightweight
ASP.NET MVC framework doesn’t use View State and thus reduces the bandwidth of the requests to an
extent.
Answer
In MVC 6 Microsoft removed the dependency of System.Web.Dll from MVC6 because it's so expensive
that typically it consume 30k of memory per request and response, whereas now MVC 6 only requires 2k
of memory per request and the response is a very small memory consumtion.
The advantage of using the cloud-optimized framework is that we can include a copy of the mono CLR
with your website. For the sake of one website we do not need to upgrade the .NET version on the entire
machine. A different version of the CLR for a different website running side by side.
MVC 6 is a part of ASP.NET 5 that has been designed for cloud-optimized applications. The runtime
automatically picks the correct version of the library when our MVC application is deployed to the cloud.
The Core CLR is also supposed to be tuned with a high resource-efficient optimization.
Microsoft has made many MVC, Web API, WebPage and SignalLrpeices we call MVC 6.
Most of the problems are solved using the Roslyn Compiler. In ASP.NET vNext uses the Roslyn
Compiler. Using the Roslyn Compiler we do not need to compile the application, it automatically
compiles the application code. You will edit a code file and can then see the changes by refreshing the
browser without stopping or rebuilding the project.
Where we use MVC5 we can host it on an IIS server and we can also run it on top of an ASP. NET
Pipeline, on the other hand MVC 6 has a feature that makes it better and that feature is itself hosted on an
IIS server and a self-user pipeline.
The configuration system provides an environment to easily deploy the application on the cloud. Our
application works just like a configuration provider. It helps to retrieve the value from the various
configuration sources like XML file.
MVC 6 includes a new environment-based configuration system. Unlike something else it depends on just
the Web.Config file in the previous version.
Dependency injection
Using the IServiceProvider interface we can easily add our own dependency injection container. We can
replace the default implementation with our own container.
Supports OWIN
We have complete control over the composable pipeline in MVC 6 applications. MVC 6 supports the
OWIN abstraction.
Any web application has two main execution steps, first understanding the request and depending on the
type of the request sending out an appropriate response. MVC application life cycle is not different it has
two main phases, first creating the request object and second sending our response to the browser.
The request object creation has four major steps. The following is a detailed explanation of the same.
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 rout table with routes collection. This filling
of the route table happens the global.asax file
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.
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.
This phase has two steps executing the action and finally sending the response as a result to the view.
Here is a complete article on ASP.Net MVC Life Cycle.
MVC routing can be defined as a pattern-matching scheme that is used for mapping incoming requests of
browsers to a definite MVC controller action.
MVC routes are accountable for governing which controller method will be executed for a given
URL. Thus, the URL comprises of the following properties:
Route Name: It is the URL pattern which is used for mapping the handler.
URL Pattern: It is another property containing the literal values as well as variable placeholders
(known as URL parameters).
Defaults: This is the default parameter value assigned at the time of parameter creation.
Constraints: These are used for applying against the URL pattern for more narrowly defining the
URL matching it.
ControllerName
ActionMethodName
Parameter
What is Attribute Routing in MVC?
Answer
A route attribute is defined on top of an action method. The following is the example of a Route Attribute
in which routing is defined where the action method is defined.
In the following example, I am defining the route attribute on top of the action method
//URL: /Mvctest
[Route(“Mvctest”)]
return View();
We can also define an optional parameter in the URL pattern by defining a mark (“?") to the route
parameter. We can also define the default value by using parameter=value.
// URL: /Mvctest/
// URL: /Mvctest/0023654
return View();
}
// URL: /Mvctest/
// URL: /Mvctest/0023654
return View();
Mention & explain the different approaches you will use to implement Ajax in MVC?
ActionResult ViewResult
It becomes effective if you want to derive different types of It is not so effective in deriving
views dynamically different types of views dynamically
It is an abstract class, meaning it has methods and variables This has been derived from the
without the implementation body of instruction. ActionResult class
JsonResult, ViewResult, and FileStreamResult are some This class do not have its own derived
examples of its derived class class
The various public methods that are associated with the controller class are considered to be the action
method. For preventing the default method, you have to allocate its public method with
NonActionAttribute.
beforeFilter(): This function runs before every action in the controller. It's the right place to
check for an active session or inspect user permissions.
beforeRender(): This function is called after controller action logic, but before the view is
rendered. This function is not often used but may be required if you are calling render() manually
before the end of a given action.
afterFilter(): This function is called after every controller action and after rendering is done. It is
the last controller method to run.
MVC MVVM
A Controller is the entry point to the Application. The View is the entry point to the Application.
One to many relationships between View & View
One to many relationships between Controller & View.
Model.
View does not have reference to the Controller View have references to the View-Model.
MVC is Old Model MVVM is a relatively New Model.
The debugging process will be complicated when we
Difficult to read, change, to unit test, and reuse this Model
have complex data bindings.
Easy for separate unit testing and code is event-
MVC Model component can be tested separately from the user
driven.
Control: It is a component that keeps consistency between the abstraction within the system and
their presentation to the user in addition to communicating with other controls within the system
Separation of Concerns can be defined as one of the core features as well as benefits of using MVC and is
supported by ASP.NET. Here, the MVC framework offers a distinct detachment of the different concerns
such as User Interface (UI), data and the business logic.
Answer
RenderSection() is a method of the WebPageBase class. Scott wrote at one point, The first parameter to
the "RenderSection()" helper method specifies the name of the section we want to render at that location
in the layout template. The second parameter is optional, and allows us to define whether the section we
are rendering is required or not. If a section is "required", then Razor will throw an error at runtime if that
section is not implemented within a view template that is based on the layout file (that can make it easier
to track down content errors). It returns the HTML content to render.
<div id="body">
@RenderBody()
</section>
</div>
Answer
GET
GET is used to request data from a specified resource. With all the GET request we pass the URL which
is compulsory, however it can take the following overloads.
POST
POST is used to submit data to be processed to a specified resource. With all the POST requests we pass
the URL which is compulsory and the data, however it can take the following overloads.
Learn more here - GET and POST Calls to Controller's Method in MVC
There are total of nine return types we can use to return results from the controller to view.
ViewResult (View)
PartialviewResult (Partialview)
This return type is used to send a part of a view that will be rendered in another view.
RedirectResult (Redirect)
This return type is used to redirect to any other controller and action method depending on the URL.
ContentResult (Content)
This return type is used to return HTTP content type like text/plain as the result of the action.
jsonResult (json)
javascriptResult (javascript)
This return type is used to return JavaScript code that will run in the browser.
FileResult (File)
EmptyResult
In MVC, controllers define action methods and these action methods generally have a one-to-one
relationship with UI controls such as clicking a button or a link, etc. For example, in one of our previous
examples, the UserController class contained methods UserAdd, UserDelete, etc.
But many times we would like to perform some action before or after a particular operation. For
achieving this functionality, ASP.NET MVC provides a feature to add pre and post-action behaviors on
the controller's action methods.
Types of Filters
Action Filters
Action filters are used to implement logic that gets executed before and after a controller action
executes. We will look at Action Filters in detail in this chapter.
Authorization Filters
Authorization filters are used to implement authentication and authorization for controller
actions.
Result Filters
Result filters contain logic that is executed before and after a view result is executed. For
example, you might want to modify a view result right before the view is rendered to the browser.
Exception Filters
Exception filters are the last type of filter to run. You can use an exception filter to handle errors
raised by either your controller actions or controller action results. You can also use exception
filters to log errors.
Action filters are one of the most commonly used filters to perform additional data processing, or
manipulating the return values or canceling the execution of an action or modifying the view structure at
run time.
Action Filters are additional attributes that can be applied to either a controller section or the entire
controller to modify the way in which action is executed. These attributes are special .NET classes
derived from System.Attribute which can be attached to classes, methods, properties, and fields.
Output Cache
This action filter caches the output of a controller action for a specified amount of time.
Handle Error
This action filter handles errors raised when a controller action executes.
Authorize
This action filter enables you to restrict access to a particular user or role.
Now we will see the code example to apply these filters on an example controller
ActionFilterDemoController. (ActionFilterDemoController is just used as an example. You can use these
filters on any of your controllers.)
Output Cache
Code Example
[HttpGet]
OutputCache(Duration = 10)]
return DateTime.Now.ToString("T");
}
}
Explain what is routing in MVC? What are the three segments for routing important?
Routing is a mechanism to process the incoming URL that is more descriptive and gives the desired
response. In this case, URL is not mapped to specific files or folder as was the case of earlier days web
sites.
There are two types of routing (after the introduction of ASP.NET MVC 5).
1. Convention-based routing - to define this type of routing, we call MapRoute method and set its
unique name, URL pattern and specify some default values.
2. Attribute-based routing - to define this type of routing, we specify the Route attribute in the
action method of the controller.
Routing is the URL pattern that is mapped together to a handler,routing is responsible for incoming
browser request for particular MVC controller. In other ways let us say routing help you to define a URL
structure and map the URL with controller. There are three segments for routing that are important,
1. ControllerName
2. ActionMethodName
3. Parammeter
Code Example
A route is a URL pattern that is mapped to a handler. The handler can be a physical file, such as a .aspx
file in a Web Forms application. A handler can also be a class that processes the request, such as a
controller in an MVC application. To define a route, you create an instance of the Route class by
specifying the URL pattern, the handler, and optionally a name for the route.
You add the route to the application by adding the Route object to the static Routes property of the
RouteTable class. The Routesproperty is a RouteCollection object that stores all the routes for the
application.
You typically do not have to write code to add routes in an MVC application. Visual Studio project
templates for MVC include preconfigured URL routes. These are defined in the MVC Application class,
which is defined in the Global.asax file.
Default Route
The default ASP.NET MVC project templates add a generic route that uses the following URL
convention to break the URL for a given request into three named segments.
URL: "{controller}/{action}/{id}"
This route pattern is registered via a call to the MapRoute() extension method of RouteCollection.
Mention what is the difference between Temp data, View, and View Bag?
In ASP.NET MVC there are three ways to pass/store data between the controllers and views.
ViewData
ViewBag
1. ViewBag is also used to pass data from the controller to the respective view.
2. ViewBag is a dynamic property that takes advantage of the new dynamic features in C# 4.0
3. It is also available for the current request only.
4. If redirection occurs, then its value becomes null.
5. It doesn’t require typecasting for the complex data type.
TempData
1. TempData is derived from TempDataDictionary class
2. TempData is used to pass data from the current request to the next request
3. It keeps the information for the time of an HTTP Request. This means only from one page to
another. It helps to maintain the data when we move from one controller to another controller or
from one action to another action
4. It requires typecasting for complex data types and checks for null values to avoid an error.
Generally, it is used to store only one time messages like the error messages and validation
messages
A partial view is a chunk of HTML that can be safely inserted into an existing DOM. Most commonly,
partial views are used to componentize Razor views and make them easier to build and update. Partial
views can also be returned directly from controller methods. In this case, the browser still receives
text/html content but not necessarily HTML content that makes up an entire page. As a result, if a URL
that returns a partial view is directly invoked from the address bar of a browser, an incomplete page may
be displayed. This may be something like a page that misses title, script and style sheets. However, when
the same URL is invoked via a script, and the response is used to insert HTML within the existing DOM,
then the net effect for the end-user may be much better and nicer.
Partial view is a reusable view (like a user control) which can be embedded inside another view. For
example, let’s say all the pages of your site have a standard structure with left menu, header, and footer as
in the following image,
Learn more here - Partial View in MVC
View
Partial View
With MVC, HTML helpers are much like traditional ASP.NET Web Form controls.
Just like web form controls in ASP.NET, HTML helpers are used to modify HTML. But HTML helpers
are more lightweight. Unlike Web Form controls, an HTML helper does not have an event model and a
view state.
With MVC, you can create your own helpers, or use the built in HTML helpers.
HTML Links
The easiest way to render an HTML link in is to use the HTML.ActionLink() helper.With MVC, the
Html.ActionLink() does not link to a view. It creates a link to a controller action.
ASP Syntax
The first parameter is the link text, and the second parameter is the name of the controller action.
Property Description.
.linkText The link text (label).
.actionName The target action.
.routeValues The values passed to the action.
.controllerName The target controller.
.htmlAttributes The set of attributes to the link.
.protocol The link protocol.
.hostname The host name for the link.
.fragment The anchor target for the link.
BeginForm()
EndForm()
TextArea()
TextBox()
CheckBox()
RadioButton()
ListBox()
DropDownList()
Hidden()
Password()
ASP.NET Syntax C#
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<p>
</p>
<p>
</p>
<p>
<label for="Password">Password:</label>
</p>
<p>
<label for="Password">Confirm Password:</label>
</p>
<p>
<label for="Profile">Profile:</label>
</p>
<p>
</p>
<p>
</p>
<%}%>
In ASP.NET MVC 5.0 we have a new attribute route,cBy using the "Route" attribute we can define the
URL structure. For example in the below code we have decorated the "GotoAbout" action with the route
attribute. The route attribute says that the "GotoAbout" can be invoked using the URL structure
"Users/about".
[Route("Users/about")]
publicActionResultGotoAbout()
return View();
TempData is a dictionary object to store data temporarily. It is a TempDataDictionary class type and
instance property of the Controller base class.
TempData is able to keep data for the duration of a HTP request, in other words it can keep live data
between two consecutive HTTP requests. It will help us to pass the state between action methods.
TempData only works with the current and subsequent request. TempData uses a session variable to store
the data. TempData Requires type casting when used to retrieve data.
Example
List < string > TempDataTest = new List < string > ();
TempDataTest.Add("Tejas");
TempDataTest.Add("Jignesh");
TempDataTest.Add("Rakesh");
TempData["EmpName"] = TempDataTest;
return View();
List < string > modelData = TempData["EmpName"] as List < string > ;
TempData.Keep();
return View(modelData);
ASP.NET MVC has always supported the concept of "view engines" - which are the pluggable modules
that implement different template syntax options. The "default" view engine for ASP.NET MVC uses the
same .aspx/.ascx/. master file templates as ASP.NET Web Forms. Other popular ASP.NET MVC view
engines are Spart&Nhaml.
Why is Razor?
Answer
C# Example
@{
@{
varweekDay = DateTime.Now.DayOfWeek;
Learn more here - Introduction to Microsoft ASP.NET MVC 3 Razor View Engine
Answer
Authentication is giving access to the user for a specific service by verifying his/her identity using his/her
credentials like username and password or email and password. It assures that the correct user is
authenticated or logged in for a specific service and the right service has been provided to the specific
user based on their role that is nothing but authorization.
ASP.NET forms authentication occurs after IIS authentication is completed. You can configure forms
authentication by using forms element with in web.config file of your application. The default attribute
values for forms authentication are shown below,
<system.web>
<authenticationmode="Forms">
</authentication>
</system.web>
The FormsAuthentication class creates the authentication cookie automatically when SetAuthCookie() or
RedirectFromLoginPage() methods are called. The value of authentication cookie contains a string
representation of the encrypted and signed FormsAuthenticationTicket object.
Answer
From ASP.Net MVC 2.0 Microsoft provided a new feature in MVC applications, Areas. Areas are just a
way to divide or “isolate” the modules of large applications in multiple or separated MVC. like,
When you add an area to a project, a route for the area is defined in an AreaRegistration file. The route
sends requests to the area based on the request URL. To register routes for areas, you add code to
theGlobal.asax file that can automatically find the area routes in the AreaRegistration file.
AreaRegistration.RegisterAllAreas();
1. Allows us to organize models, views and controllers into separate functional sections of the
application, such as administration, billing, customer support and much more.
2. Easy to integrate with other Areas created by another.
3. Easy for unit testing.
Answer
DisplayModes give you another level of flexibility on top of the default capabilities we saw in the last
section. DisplayModes can also be used along with the previous feature so we will simply build off of the
site we just created.
1. We should register Display Mode with a suffix for particular browser using
“DefaultDisplayMode”e class inApplication_Start() method in the Global.asax file.
2. View name for particular browser should be appended with suffix mentioned in first step.
Answer
ASP.NET Scaffolding is a code generation framework for ASP.NET Web applications. Visual Studio
2013 includes pre-installed code generators for MVC and Web API projects. You add scaffolding to your
project when you want to quickly add code that interacts with data models. Using scaffolding can reduce
the amount of time to develop standard data operations in your project.
Scaffolding consists of page templates, entity page templates, field page templates, and filter templates.
These templates are called Scaffold templates and allow you to quickly build a functional data-driven
Website.
Scaffolding Templates
Create
It creates a View that helps in creating a new record for the Model. It automatically generates a label and
input field for each property in the Model.
Delete
It creates a list of records from the model collection along with the delete link with delete record.
Details
It generates a view that displays the label and an input field of the each property of the Model in the MVC
framework.
Edit
It creates a View with a form that helps in editing the current Model. It also generates a form with label
and field for each property of the model.
List
It generally creates a View with the help of a HTML table that lists the Models from the Model
Collection. It also generates a HTML table column for each property of the Model.
Answer
Routing is a great feature of MVC, it provides a REST based URL that is very easy to remember and
improves page ranking in search engines.
This article is not an introduction to Routing in MVC, but we will learn a few features of routing and by
implementing them we can develop a very flexible and user-friendly application. So, let's start without
wasting valuable time.
This is very necessary for when we want to add a specific constraint to our URL. Say, for example we
want a URL.
So, we want to set some constraint string after our host name. Fine, let's see how to implement it.
It's very simple to implement, just open the RouteConfig.cs file and you will find the routing definition in
that. And modify the routing entry as in the following. We will see that we have added “abc” before.
Controller name, now when we browse we need to specify the string in the URL, as in the following:
Answer
ASP.NET MVC has always supported the concept of "view engines" that are the pluggable modules that
implement various template syntax options. The "default" view engine for ASP.NET MVC uses the
same .aspx/.ascx/.master file templates as ASP.NET Web Forms. In this article I go through the Razor
View Engine to create a view of an application. "Razor" was in development beginning in June 2010 and
was released for Microsoft Visual Studio in January 2011.
Razor is not a new programming language itself, but uses C# syntax for embedding code in a page
without the ASP.NET delimiters: <%= %>. It is a simple-syntax view engine and was released as part of
ASP.NET MVC 3. The Razor file extension is "cshtml" for the C# language. It supports TDD (Test
Driven Development) because it does not depend on the System.Web.UI.Page class.
Learn more here - Getting Started with Razor View Engine in MVC 3
Answer
The main purpose of using Output Caching is to dramatically improve the performance of an ASP.NET
MVC Application. It enables us to cache the content returned by any controller method so that the same
content does not need to be generated each time the same controller method is invoked. Output Caching
has huge advantages, such as it reduces server round trips, reduces database server round trips, reduces
network traffic etc.
Let's take an example. My MVC application displays a list of database records on the view page so by
default each time the user invokes the controller method to see records, the application loops through the
entire process and executes the database query. And this can actually decrease the application
performance. So, we can advantage of the "Output Caching" that avoids executing database queries each
time the user invokes the controller method. Here the view page is retrieved from the cache instead of
invoking the controller method and doing redundant work.
In the above paragraph I said, in Output Caching the view page is retrieved from the cache, so where is
the content cached/stored?
Please note, there is no guarantee that content will be cached for the amount of time that we specify.
When memory resources become low, the cache starts evicting content automatically.
OutputCache label has a "Location" attribute and it is fully controllable. Its default value is "Any",
however there are the following locations available; as of now, we can use any one.
1. Any
2. Client
3. Downstream
4. Server
5. None
6. ServerAndClient
With "Any", the output cache is stored on the server where the request was processed. The recommended
store cache is always on the server very carefully. You will learn about some security related tips in the
following "Don't use Output Cache".
Answer
Bundling and minification are two new techniques introduced to improve request load time. It 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
It lets us combine multiple JavaScript (.js) files or multiple cascading style sheet (.css) files so that they
can be downloaded as a unit, rather than making individual HTTP requests.
Minification
It squeezes out whitespace and performs other types of compression to make the downloaded files as
small as possible. At runtime, the process identifies the user agent, for example IE, Mozilla, etc. and then
removes whatever is specific to Mozilla when the request comes from IE.
Learn more here - Bundling and Minification in Visual Studio 2012 or Migrate Existing Website
Answer
The ValidationSummary helper method generates an unordered list (ul element) of validation messages
that are in the ModelStateDictionary object.
The ValidationSummary can be used to display all the error messages for all the fields. It can also be used
to display custom error messages. The following figure shows how ValidationSummary displays the error
messages.
ValidationSummary() Signature
So now, the following Edit view will display error messages as a summary at the top. Please make sure
that you don't have a ValidationMessageFor method for each of the fields.
Answer
Database First Approach is an alternative to the Code First and Model First approaches to the Entity Data
Model which creates model codes (classes,properties, DbContextetc) from the database in the project and
that classes behaves as the link between database and controller.
There are the following approach which is used to connect with database to application.
Database First
Model First
Code First
Database first is nothing but only a approach to create web application where database is available first
and can interact with the database. In this database, database is created first and after that we manage the
code. The Entity Framework is able to generate a business model based on the tables and columns in a
relational database.
Learn more here - Database First Approach With ASP.NET MVC Step By Step Part 1
When you create a project a folder structure gets created by default under the name of your project which
can be seen in solution explorer. Below i will give you a brief explanation of what these folders are for.
Model
This folder contains classes that is used to provide data. These classes can contain data that is retrived
from the database or data inserted in the form by the user to update the database.
Controllers
These are the classes which will perform the action invoked by the user. These classes contains methods
known as "Actions" which responds to the user action accordingly.
Views
These are simple pages which uses the model class data to populate the HTML controls and renders it to
the client browser.
App_Start
Here are more Similarities and Dissimilarities Between MVC and Web Forms.
Answer
Exception handling may be required in any application, whether it is a web application or a Windows
Forms application.
ASP.Net MVC has an attribute called "HandleError" that provides built-in exception filters. The
HandleError attribute in ASP.NET MVC can be applied over the action method as well as Controller or at
the global level. The HandleError attribute is the default implementation of IExceptionFilter. When we
create a MVC application, the HandleError attribute is added within the Global.asax.cs file and registered
in the Application_Start event.
filters.Add(new HandleErrorAttribute());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
The HandleError Error attribute has a couple for properties that are very useful in handling the exception.
ExceptionType
Type of exception to be catch. If this property is not specified then the HandleError filter handles all
exceptions.
View
Master
Order
Order in which the action filters are executed. The Order property has an integer value and it specifies the
priority from 1 to any positive integer value. 1 means highest priority and the greater the value of the
integer is, the lower is the priority of the filter.
AllowMultiple
It indicates whether more than one instance of the error filter attribute can be specified.
Example
[HandleError(View = "Error")]
return View();
}
HandleError Attribute at Action Method Level,
[HandleError(View = "Error")]
return View();
Here are more details on Exception or Error Handling in ASP.Net MVC Using HandleError Attribute.
What is ViewStart?
Answer
Razor View Engine introduced a new layout named _ViewStart which is applied on all view
automatically. Razor View Engine firstly executes the _ViewStart and then start rendering the other view
and merges them.
Example of Viewstart
@{
Layout = "~/Views/Shared/_v1.cshtml";
< title > ViewStart < /title> < /head> < body >
< /body>
< /html>
Learn more here - Viewstart Page in ASP.NET MVC 3
Answer
Action methods on controllers return JsonResult (JavaScript Object Notation result) that can be used in an
AJAX application. This class is inherited from the "ActionResult" abstract class. Here Json is provided
one argument which must be serializable. The JSON result object that serializes the specified object to
JSON format.
What is TempData?
Answer - Tempdata
ViewBag is dynamic property that takes advantage of new dynamic features in C# 4.0. It's also used to
pass data from a controller to a view. In short, The ViewBag property is simply a wrapper around the
ViewData that exposes the ViewData dictionary as a dynamic object. Now create an action method
"StudentSummary" in the "DisplayDataController" controller that stores a Student class object in
ViewBag.
Age = 24,
City = "Jaipur"
};
ViewBag.Student = student;
return View();
Thereafter create a view StudentSummary ("StudentSummary.cshtml") that shows student object data.
ViewBag does not require typecasting for complex data type so you can directly access the data from
ViewBag.
@{
< tr >
< th > Name < /th> < th > Age < /th> < th > City < /th> < /tr> < tr >
< td > @student.Name < /td> < td > @student.Age < /td> < td > @student.City < /td> < /tr>
< /table>
Here we used one more thing, "ViewBag.Title", that shows the title of the page.
ViewData is a dictionary of objects that is derived from ViewDataDictionary class and accessible
using strings as keys.
ViewBag is a dynamic property that takes advantage of the new dynamic features in C# 4.0.
ViewData requires typecasting for complex data type and check for null values to avoid error.
ViewBag doesn't require typecasting for complex data type.
Calling of ViewBag is:
ViewBag.Name = "Yogesh";
Calling of ViewDatais :
ViewData["Name"] = "yogesh";
DataAnnotation plays a vital role in added validation to properties while designing the model itself. This
validation can be added for both the client side and the server side.
You understand that decorating the properties in a model with an Attribute can make that property
eligible for Validation.
Answer
The HandleErrorAttribute allows you to use a custom page for this error. First you need to update your
web.config file to allow your application to handle custom errors.
<system.web>
<customErrors mode="On">
</system.web>
[HandleError]
[HandleError]
publicActionResultThrowException()
By calling the ThrowException action, this would then redirect the user to the default error page. In our
case though, we want to use a custom error page and redirect the user there instead.So, let's create our
new custom view page.
[HandleError]
[HandleError(View = "CustomErrorView")]
publicActionResultThrowException()
{
throw new ApplicationException();
Answer
The ASP.NET MVC Framework validates any data passed to the controller action that is executing, It
populates a ModelState object with any validation failures that it finds and passes that object to the
controller. Then the controller actions can query the ModelState to discover whether the request is valid
and react accordingly.
I will use two approaches in this article to validate a model data. One is to manually add an error to the
ModelState object and another uses the Data Annotation API to validate the model data.
I create a User class under the Models folder. The User class has two properties "Name" and "Email". The
"Name" field has required field validations while the "Email" field has Email validation. So let's see the
procedure to implement the validation. Create the User Model as in the following,
namespace ServerValidation.Models
get;
set;
get;
set;
}
After that I create a controller action in User Controller (UserController.cs under Controllers folder). That
action method has logic for the required validation for Name and Email validation on the Email field. I
add an error message on ModelState with a key and that message will be shown on the view whenever the
data is not to be validated in the model.
using System.Text.RegularExpressions;
using System.Web.Mvc;
namespace ServerValidation.Controllers
return View();
[HttpPost]
if (string.IsNullOrEmpty(model.Name))
if (!string.IsNullOrEmpty(model.Email))
{
string emailRegex = @ "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@ "\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@ ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
if (!re.IsMatch(model.Email))
} else {
if (ModelState.IsValid)
ViewBag.Name = model.Name;
ViewBag.Email = model.Email;
return View(model);
Thereafter I create a view (Index.cshtml) for the user input under the User folder.
@model ServerValidation.Models.User
@{
ViewBag.Title = "Index";
@using(Html.BeginForm())
{
if (@ViewData.ModelState.IsValid)
if (@ViewBag.Name != null)
{<b>
< legend > User < /legend> < div class = "editor-label" >
@Html.LabelFor(model => model.Name) < /div> < div class = "editor-field" >
@if(!ViewData.ModelState.IsValid)
@Html.LabelFor(model => model.Email) < /div> < div class = "editor-field" >
@if(!ViewData.ModelState.IsValid)
Answer
Remote validation is the process where we validate specific data posting data to a server without posting
the entire form data to the server. Let's see an actual scenario, in one of my projects I had a requirement to
validate an email address, whetehr it already exists in the database. Remote validation was useful for that;
without posting all the data we can validate only the email address supplied by the user.
Practical Explanation
Let's create a MVC project and name it accordingly, for me its “TestingRemoteValidation”. Once the
project is created let's create a model named UserModel that will look like:
[Required]
get;
set;
get;
set;
}
Let's get some understanding of the remote attribute used, so the very first parameter
“CheckExistingEmail” is the the name of the action. The second parameter “Home” is referred to as
controller so to validate the input for the UserEmailAddress the “CheckExistingEmail” action of the
“Home” controller is called and the third parameter is the error message. Let's implement the
“CheckExistingEmail” action result in our home controller.
public ActionResult CheckExistingEmail(string UserEmailAddress)
{
bool ifEmailExist = false;
try
{
ifEmailExist = UserEmailAddress.Equals("[email protected]") ? true : false;
return Json(!ifEmailExist, JsonRequestBehavior.AllowGet);
} catch (Exception ex)
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
Answer
Exception are part and parcel of an application. They are a boon and a ban for an application too. Isn't it?
This would be controversial, for developers it helps them track minor and major defects in an application
and sometimes they are frustrating when it lets users land on the Yellow screen of death each time. This
would make the users mundane to the application. Thus to avoid this, developers handle the exceptions.
But still sometimes there are a few unhandled exceptions.
Now what is to be done for them? MVC provides us with built-in "Exception Filters" about which we will
explain here.
Let's start!
Get Started
Exception filters run when some of the exceptions are unhandled and thrown from an invoked action. The
reason for the exception can be anything and so is the source of the exception.
Custom Exception Filters must implement the builtinIExceptionFilter interface. The interface looks as in
the following,
{
void OnException(ExceptionContext filterContext)
Whenever an unhandled exception is encountered, the OnException method gets invoked. The parameter
as we can see, ExceptionContext is derived from the ControllerContext and has a number of built-in
properties that can be used to get the information about the request causing the exception. Their property's
ExceptionContextpassess are shown in the following table:
The exception being thrown from the action is detailed by the Exception property and once handled (if),
then the property ExceptionHandled can be toggled, so that the other filters would know if the exception
has been already handled and cancel the other filter requests to handle. The problem is that if the
exceptions are not handled, then the default MVC behavior shows the dreaded yellow screen of death. To
the users, that makes a very impression on the users and more importantly, it exposes the application's
handy and secure information to the outside world that may have hackers and then the application gets
into the road to hell. Thus, the exceptions need to be dealt with very carefully. Let's show one small
custom exception filter. This filter can be stored inside the Filters folder in the web project of the solution.
Let's add a file/class called CustomExceptionFilter.cs.
filterContext.ExceptionHandled = true;
Authentication is to give access to the user for a specific service by verifying his/her identity using his/her
credentials like username and password.
After IIS authentication, ASP.NET form authentication occurs. We can configure forms authentication by
using forms element in web.config. The default attribute values for forms authentication are shown
below,
<system.web>
<authenticationmode="Forms">
</authentication>
</system.web>
The FormsAuthentication class creates the authentication cookie automatically when SetAuthCookie() or
RedirectFromLoginPage() methods are called. The value of an authentication cookie contains a string
representation of the encrypted and signed FormsAuthenticationTicket object.
Html.RenderPartial is directly written to the HTTP response stream which is used the same Text Writer
object as used in the current webpage/template. Since there is no return type of Validation Annotations in
MVC, the return type of Validation Annotations is void. We don't need to create any actions so it is
simple to use, it is very useful when we want to show the data which is in another model view.
For example: if we want to show comments of an article, we will prefer to use RenderPartial method
since the information and comments of the article are already populated in the view model.
@{Html.RenderPartial("_Comments");}
When it is executed its result is directly written to the response stream which makes it faster when
compared with the partial method
In Html.Partial, the partial view is viewed as an encoded HTML string. Due to its string value return type,
we can store the Html.Partial value in a variable.it same as Html.RenderPartial in case of action creation
also, we don’t need to create action, Partial method is also useful when the displaying data in the partial
view is already in the corresponding view model which same as html.RenderPartial.
@Html.Partial("_Comments")
What was the need to introduce WebAPI technology?
Answer: HTTP was earlier used as a protocol for all types of clients. But with time, the client variety
started increasing and spreading out in different directions. The use of JavaScript, Windows applications,
and even mobile demanded the high consumption of HTTP. Due to this reason, the REST approach was
proposed. WebAPI technology, therefore, applied the REST principles to expose the data over HTTP.
Yes, Glimpse helps in finding out the performance, supports debugging, and also helps in diagnosing
information. It helps in gaining information about the routes, timelines, model binding, etc.
What can help in navigating from one view to another using a hyperlink?
Answer: The Action link can help in navigating from one view to another using the hyperlink, which
creates a simple URL and navigates to the “Home” controller and also generates the Gotohome action.
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.
1 @TempData["MyData"];
2 TempData.Keep("MyData");
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 is WebAPI?
HTTP is the most used protocol. Since many years, the browser was the most preferred client by which
we consumed data exposed over HTTP. But as years passed by, client variety started spreading out. We
had demanded to consume data on HTTP from clients like mobile, JavaScript, Windows applications, etc.
For satisfying the broad range of clients, REST was the proposed approach. WebAPI is the technology by
which you can expose data over HTTP following REST principles.
1 @{
2 int x = 123;
3 string y = “aa”;
4 }
[ASP.NET MVC 5] You have a page with Razor C# syntax. What is the difference between these
two methods, RenderAction and RenderPartial? What will they do?
@{
Html.RenderAction("Add");
Html.RenderPartial("Add");
RenderAction will call an action method of the current controller and render a result inline. In
contrast, RenderPartial will render the specified view inline without calling any action method.
What is the difference between asynchronous and synchronous actions? When would you use
asynchronous actions?
Asynchronous actions won’t block the executing thread if it waits for an I/O operation. Using
asynchronous actions can increase the throughput of a system if you use such a pattern for I/O operations,
but it won’t help with CPU-bound operations.
You have an ASP.NET MVC application where you need to use ASP.NET session state and support
running across several servers. What additional configuration can you perform without writing
custom code?
In the Web.config file (in the root folder of your application) set sessionState to StateServer for shared in-
memory storage or SQLServer for shared durable storage.
What is the recommended approach for ASP.NET MVC to globally intercept exceptions? What
other functionality can be implemented with the approach?
You can create a custom exception filter to intercept and log unhandled exceptions.
In ASP.NET MVC 5:
DELET
~/v2/Categories/Delete Delete E
Hide answer
In ASP.NET MVC 5:
Use a custom route and attributes on action methods to restrict HTTP methods.
routes.MapRoute(
name: "v2",
url: "v2/{controller}/{action}",
);
Step 2: To restrict HTTP methods for actions, we need to mark CategoriesController’s methods with the
attributes [HttpGet], [HttpPost], and [HttpDelete] according to our requirements.
Option #1: Add a custom global route and attributes on action methods to restrict HTTP methods.
Step 1: We need to add a custom global route (usually in Startup.cs) before the default one:
routes.MapRoute(
name: "v2",
template: "v2/{controller}/{action=ShowAll}"
);
Step 2: To restrict HTTP methods for actions, we need to mark CategoriesController’s methods with the
attributes [HttpGet], [HttpPost], and [HttpDelete] according to our requirements.
This is a good approach for applications without specific requirements for a URL scheme.
Steps:
[HttpGet]
[Route("v2/[controller]")]
return View();
[HttpPost]
[Route("v2/[controller]/[action]")]
return View();
This is a good decision if you have specific requirements for a URL scheme, e.g., a REST API.
Option #3: Configure a base route on a controller level and relative routes on an action level.
Steps:
1. Specify a basic controller route template with an attribute.
[Route("v2/[controller]")]
[HttpGet]
[Route("")]
return View();
[HttpPost]
[Route("[action]")]
return View();
// ...
This is also a good decision if you have specific requirements for a URL scheme. In fact, it can be a better
option than the previous one if you always have a constant string or a controller name as a prefix for your
routes.
What basic folders do we have in an ASP.NET project without Areas? What are they for? What
subfolders do they have (if applicable)? Which folders are publicly accessible?
Hide answer
Views: The folder contains a folder for every controller, plus a special folder Shared for views
used by multiple views/controllers. For example, if we have a controller called HomeController,
we will have a Home subfolder here with all the views related to HomeController.