This document introduces the ASP.NET MVC framework. It discusses how MVC enables clean separation of concerns through distinct model, view, and controller components. Controllers handle requests and choose views to render while passing them model data. Views focus on rendering output. The document also outlines how MVC supports testable, RESTful code through interfaces and dependency injection. It provides examples of routing, controller actions, view selection, and testing approaches. Finally, it demonstrates MVC concepts through sample projects.
Young Call~Girl in Pragati Maidan New Delhi 8448380779 Full Enjoy Escort Service
Hanselman lipton asp_connections_ams304_mvc
1. AMS304: Introduction to the
ASP.NET Model View Controller
(MVC) Framework
Scott Hanselman Eilon Lipton
Microsoft Microsoft
scottha@microsoft.com elipton@microsoft.com
3. Goodness
• Maintain Clean Separation of Concerns
● Easy Testing
● Red/Green TDD
● Highly maintainable applications by default
• Extensible and Pluggable
● Support replacing any component of the
system
4. Goodness
• Enable clean URLs and HTML
● SEO and REST friendly URL structures
• Great integration within ASP.NET
● Support both static and dynamic languages
5. What’s the Point?
• This is not Web Forms 4.0
● It’s about alternatives. Car vs. Motorcycle.
• Simple or as complex as you like
● Extend it, add IOC. Or not. If the shoe pinches, don’t
wear it.
• Fundamental
● Part of System.Web and isn’t going anywhere.
• Plays Well With Others
● Feel free to use NHibernate for Models, Brail for
Views and Whatever for Controllers. Be Happy.
7. A Little More Detail
•Browser requests /Products/
•Route is determined
Model •Controller is activated
•Method on Controller is invoke
•Controller does some stuff
•Renders View, passing in
custom ViewData
•URLs are rendered,
pointing to other
View Controller Controllers
8. Even More Detail – Request Flow
Request • You can futz at each step
in the process
URL Http
Routing Controller Response
Handler
Route View
Route View
Handler Factory
9. Demo – Hello MVC World
Don’t fall asleep, it’ll be worth it.
11. Basic Controller Handling
• Scenarios, Goals and Design
● URLs route to controller “actions”, not pages –
mark actions in Controller.
● Controller executes logic, chooses view.
[ControllerAction]
public void ShowPost(int id) {
Post p = PostRepository.GetPostById(id);
if (p != null) {
RenderView("showpost", p);
} else {
RenderView("nosuchpost", id);
}
}
12. Basic Views
• Scenarios, Goals and Design:
● Are for rendering/output.
• Pre-defined and extensible rendering helpers
● Can use .ASPX, .ASCX, .MASTER, etc.
● Can replace with other view technologies:
• Template engines (NVelocity, Brail, …).
• Output formats (images, RSS, JSON, …).
• Mock out for testing.
● Controller sets data on the View
• Loosely typed or strongly typed data
13. URL Routing – Pretty URIs
• Developers adds Routes to a global RouteTable
• Mapping creates a RouteData - a bag of key/values
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route {
Url = "Blog/bydate/[year]/[month]/[day]",
Defaults = new { controller="blog", action="showposts" },
Validation = new { year=@"d{1,4}", month= @"d{1,2}",
day = @"d{1,2}"} });
RouteTable.Routes.Add(new Route {
Url = "[controller]/[action]/[id]",
RouteHandler = typeof(MvcRouteHandler) });
}
17. Testing Controller Actions
• No requirement to mock out full ASP.NET runtime.
[TestMethod]
public void ShowPostsDisplayPostView() {
TestPostRepository repository = new TestPostRepository();
TestViewFactory viewFactory = new TestViewFactory();
BlogController controller = new BlogController(…);
controller.ShowPost(2);
Assert.AreEqual("showpost", viewFactory.LastRequestedView);
Assert.IsTrue(repository.GetPostByIdWasCalled);
Assert.AreEqual(2, repository.LastRequestedPostId);
}
25. Conclusion
• This is not Web Forms 4.0
● It’s about alternatives. Car vs. Motorcycle.
• Simple or as complex as you like
● Extend it, add IOC. Or not. If the shoe pinches, don’t
wear it.
• Fundamental
● Part of System.Web and isn’t going anywhere.
• Plays Well With Others
● Feel free to use NHibernate for Models, Brail for
Views and VB for Controllers. Be Happy.
26. Your Feedback is Important
Please fill out a session evaluation form and
either put them in the basket near the exit
or drop them off at the conference
registration desk.
Thank you!