本文对ASP.NET MVC的模型、视图和控制器做一次高级概述,换句话说,就是解释ASP.NET MVC中的"M""V""C"。阅读完本文后,你应该理解ASP.NET MVC中的各个部分是如何协同工作的,同时也应该知道ASP.NET MVC应用程序和ASP应用程序及ASP.NET Web窗体应用程序之间的不同之处了。

  注意HomeController有两个方法(函数):Index()和About(),这两个方法对应控制器暴露的两个行为,URL /Home/Index调用HomeController.Index()方法,URL /Home/About调用

  HomeController.About()方法。

  控制器中所有公共方法都是以控制器行为方式暴露的,这意味着任何在浏览器地址栏敲入对应的URL都可以调用这些方法,这一点需要注意。

  理解视图

  HomeController类暴露了两个控制器行为:Index()和About(),它们返回的都是一个视图。视图包括HTML标记和发送给浏览器的内容,在ASP.NET MVC应用程序中,一个视图就相当于一个页面。

  你必须在正确的位置创建你的视图,HomeController.Index()行为返回位于下列路径的视图:

  ViewsHomeIndex.aspx

  HomeController.About()行为返回位于下列路径的视图:

  ViewsHomeAbout.aspx

  通常,如果你想为控制器行为返回一个视图,你必须在视图文件夹下创建一个与控制器名字相同的子文件夹,在这个子文件夹中,还必须创建一个与控制器行为同名的.aspx文件。

  清单3中显示了About视图文件的内容。

  清单3 About.aspx

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/
Site.Master"
AutoEventWireup="false" CodeBehind="About.aspx.vb" Inherits="MvcA
pplication1.About" %>
  <asp:Content ID="aboutContent" ContentPlaceHolderID="MainC
ontent" runat="server">
   <h2>About Us</h2>
   <p>
     TODO: Put <em>about</em> content here.
   </p>
</asp:Content>

  如果你忽略清单3中的第一行,视图剩下的部分呢内容都是标准的HTML,你可以在里面添加任何需要的HTML内容。

  视图和ASP页面或ASP.NET Web窗体非常类似,视图可以包括HTML内容和脚本,你可以用你熟悉的.NET编程语言(如c#或VB .NET)编写脚本,使用脚本来显示动态内容,如数据库数据。

  理解模型

  我们已经讨论了控制器和视图,我们要讨论的最后一个主题是模型,什么是MVC模型呢?

  MVC模型包括应用程序的所有逻辑,这些逻辑在视图和控制器都是没有的,模型应该包括应用程序所有的业务逻辑和数据库访问逻辑,例如,如果你使用LINQ到SQL访问你的数据库,那么你就应该在模型(Models)文件夹下创建LINQ到SQL的类(dbml文件)。

  视图应该只包括与用户接口有关的逻辑,控制器应该只包括暴露给请求返回正确视图的最小逻辑或将用户重定向到另一个控制器行为的逻辑,除此之外其它任何逻辑都应该包括在模型中。

  通常,你应该为控制器减肥,为模型增肥,控制器方法应该只包括很少的代码,如果控制器行为太臃肿了,你应该思考如何将其中隐含的逻辑迁移到模型中去。

  小结

  本文向你介绍了ASP.NET MVC各个不同部件之间的差异,并且学习了URL路由如何将入站请求路由到合适的控制器行为的,还学习了视图是如何返回给浏览器的,最后还介绍了模型应该包括哪些业务逻辑和数据库访问逻辑。

  原文:Understanding Models, Views, and Controllers  作者:Stephen Walther

posted on 2009-07-24 16:26  vibratea  阅读(197)  评论(0编辑  收藏  举报