ASP.NET MVC Overview (C#)
Controller (MVC) architectural pattern separates an application into three main
components: the model, the view, and the controller. The ASP.NET MVC framework provides
an alternative to the ASP.NET Web Forms pattern for creating MVC
The ASP.NET MVC framework is a lightweight, highly testable presentation framework that (as
with Web Forms
based applications) is integrated with existing ASP.NET features, such as
master pages and membership
based authentication. The MVC f
ramework is defined in the
namespace and is a fundamental, supported part of the
MVC is a standard design pattern that many developers are familiar with. Some types of Web
applications will benefit from the MVC framew
ork. Others will continue to use the traditional
ASP.NET application pattern that is based on Web Forms and postbacks. Other types of Web
applications will combine the two approaches; neither approach excludes the other.
The MVC framework includes the fo
: Invoking a controller action that expects a parameter value (
Click to view full
. Model objects are the parts of the application that im
plement the logic for the
application s data domain. Often, model objects retrieve and store model state in a
database. For example, a Product object might retrieve information from a database,
operate on it, and then write updated information back to a Pr
oducts table in SQL Server.
In small applications, the model is often a conceptual separation instead of a physical one. For
example, if the application only reads a data set and sends it to the view, the application does not
have a physical model layer
and associated classes. In that case, the data set takes on the role of a
. Views are the components that display the application s user interface (UI).
Typically, this UI is created from the model data. An example would be an edit view
Products table that displays text boxes, drop
down lists, and check boxes based on the
current state of a Products object.
. Controllers are the components that handle user interaction, work with the
model, and ultimately select a view t
o render that displays UI. In an MVC application,
the view only displays information; the controller handles and responds to user input and
interaction. For example, the controller handles query
string values, and passes these
values to the model, which in
turn queries the database by using the values.
The MVC pattern helps you create applications that separate the different aspects of the
application (input logic, business logic, and UI logic), while providing a loose coupling between
these elements. The
pattern specifies where each kind of logic should be located in the
application. The UI logic belongs in the view. Input logic belongs in the controller. Business
logic belongs in the model. This separation helps you manage complexity when you build an
lication, because it enables you to focus on one aspect of the implementation at a time. For
example, you can focus on the view without depending on the business logic.
In addition to managing complexity, the MVC pattern makes it easier to test applicati
ons than it
is to test a Web Forms
based ASP.NET Web application. For example, in a Web Forms
ASP.NET Web application, a single class is used both to display output and to respond to user
input. Writing automated tests for Web Forms
based ASP.NET app
lications can be complex,
because to test an individual page, you must instantiate the page class, all its child controls, and
additional dependent classes in the application. Because so many classes are instantiated to run
the page, it can be hard to writ
e tests that focus exclusively on individual parts of the application.
Tests for Web Forms
based ASP.NET applications can therefore be more difficult to implement
than tests in an MVC application. Moreover, tests in a Web Forms
based ASP.NET application
quire a Web server. The MVC framework decouples the components and makes heavy use of
interfaces, which makes it possible to test individual components in isolation from the rest of the
The loose coupling between the three main components of a
n MVC application also promotes
parallel development. For instance, one developer can work on the view, a second developer can
work on the controller logic, and a third developer can focus on the business logic in the model.
Deciding When to Create an MVC
You must consider carefully whether to implement a Web application by using either the
ASP.NET MVC framework or the ASP.NET Web Forms model. The MVC framework does not
replace the Web Forms model; you can use either framework for Web applications. (If you
existing Web Forms
based applications, these continue to work exactly as they always have.)
Before you decide to use the MVC framework or the Web Forms model for a specific Web site,
weigh the advantages of each approach.
Advantages of an MVC
The ASP.NET MVC framework offers the following advantages:
It makes it easier to manage complexity by dividing an application into the model, the
view, and the controller.
It does not use view state or server
based forms. This makes the MV
C framework ideal
for developers who want full control over the behavior of an application.
It uses a Front Controller pattern that processes Web application requests through a single
controller. This enables you to design an application that supports a ri
infrastructure. For more information, see
on the MSDN Web site.
It provides better support for test
driven development (TDD).
ks well for Web applications that are supported by large teams of developers and
Web designers who need a high degree of control over the application behavior.
Advantages of a Web Forms
Based Web Application
The Web Forms
based framework offers the follo
It supports an event model that preserves state over HTTP, which benefits line
business Web application development. The Web Forms
based application provides
dozens of events that are supported in hundreds of server controls.
It uses a
Page Controller pattern that adds functionality to individual pages. For more
on the MSDN Web site.
It uses view state or server
based forms, which can make managing state information
It works well for small teams of Web developers and designers who want to take
advantage of the large number of components available for rapid application
In general, it is less c
omplex for application development, because the components (the
class, controls, and so on) are tightly integrated and usually require less code than
the MVC model.
Features of the ASP.NET MVC Framework
The ASP.NET MVC framework provides the followin
Separation of application tasks (input logic, business logic, and UI logic), testability, and
driven development (TDD) by default. All core contracts in the MVC framework are
based and can be tested by using mock objects, which
are simulated objects that
imitate the behavior of actual objects in the application. You can unit
test the application
without having to run the controllers in an ASP.NET process, which makes unit testing
fast and flexible. You can use any unit
amework that is compatible with the
An extensible and pluggable framework. The components of the ASP.NET MVC
framework are designed so that they can be easily replaced or customized. You can plug
in your own view engine, URL routing policy,
method parameter serialization, and
other components. The ASP.NET MVC framework also supports the use of Dependency
Injection (DI) and Inversion of Control (IOC) container models. DI allows you to inject
objects into a class, instead of relying on
the class to create the object itself. IOC specifies
that if an object requires another object, the first objects should get the second object
from an outside source such as a configuration file. This makes testing easier.
A powerful URL
that lets you build applications that have
comprehensible and searchable URLs. URLs do not have to include file
and are designed to support URL naming patterns that work well for search engine
optimization (SEO) and representational state
transfer (REST) addressing.
Support for using the markup in existing ASP.NET page (.aspx files), user control (.ascx
files), and master page (.master files) markup files as view templates. You can use
existing ASP.NET features with the ASP.NET MVC framewor
k, such as nested master
line expressions (<%= %>), declarative server controls, templates, data
binding, localization, and so on.
Support for existing ASP.NET features. ASP.NET MVC lets you use features such as
forms authentication and Windows a
uthentication, URL authorization, membership and
roles, output and data caching, session and profile state management, health monitoring,
the configuration system, and the provider architecture