快速业务通道

快速搞懂ASP.NET MVC

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
n」的选项。创建一个默认的 MVC 项目后, 其在 VS 解决方案的结构如下图所示:

图 2 View 中的 ASPX、ASCX、MasterPage 纯粹负责显示用,默认没 有配置 Code-Behind 文件 (aspx.cs)

如上图 2,ASP.NET MVC 项目,会 自动产生存储 MVC 文件的三个文件夹、控制流程的两个 Controller 类、多个 没有 Code-Behind 的 View 页面,和定义 Routing rules 的 Global.asax.cs 。

事实上版工我在一年前试玩 ASP.NET MVC Beta 版时,当时的 View 默认仍配有 Code-Behind 文件,但里面空无一物,只有一行注释:

!-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --

在前阵子发布的正式版里,View 默认已不配置 Code-Behind 文件。此外,ASP.NET MVC 里的 View,为了让项目开发更明确地切割,已不再 有页面初始化和加载方法,也没有事件处理程序,除了基类声明以外没有任何内 容,基类声明为 System.Web.Mvc.ViewPage,而不再是过去 WebForm 的 System.Web.UI.Page。

新创的 ASP.NET MVC 项目,直接按 F5 即可执行 ,如下图 3 所示。但由于 MVC 的 View 会在显示前先要求 Controller 运行 ( 参考图 1),因此若您尝试将 View 里的某个 .aspx 设为「起始页」后,按 F5 执行时,反而会发生「HTTP 404. The resource cannot be found.」的错误, 亦即若想直接导航至该页面将不起作用。

图 3 ASP.NET MVC 项目的首页

您会发现浏览器里的 URL 会 像下面这样,网址不是具体的 .aspx 扩展名:

http://localhost:端口 号/Home/index

http://localhost:端口号

事实上该页的内容,是 去捉 Views/Home 文件夹底下,的 Index.aspx 的内容来呈现。其由 Global.asax.cs 配置,并用了「URL 重写 (Url Routing)」,让用户可以按你 自己定义的的规则来访问网站 [14]。

在图 3 首页的右侧,会有两个 hyperlink,可分别导向「LogOn.aspx」、「About.aspx」页面;但 hyperlink 要导向哪一个页面,不是写死在 View 的页面中 (已无 Code-Behind),而是统 一由 Global.asax.cs 去定义 Routing rules,去解析当浏览器收到 URL、表单 或任何 request 时,应该要扔给哪一个 Controller 自定义类去处理;再由该 个被指定的 Controller (如上图 2 里默认自动产生的 HomeController.cs), 里面所定义的一或多个 System.Web.Mvc.ActionResult 类,以及 View 方法 ( 术语叫 action method),去设定要把 UI render 回哪一个 View (页面) 去, 也就是本文一开始所提到的 (参考本帖图 1),Model 2 架构是由 Controller 文件,去统一控管整个 ASP.NET 系统的流程、页面导向,而不是写死在各个 aspx.cs 文件里。

以下为 Global.asax.cs 的一部分代码,网友们可搭 配参考上图 2 里 Controller、View 的结构去阅读:

using  System.Web.Mvc;
using System.Web.Routing;

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo} ");

        // C# 3.0 的「匿名类型 (Anonymous Type)」语法
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", //  URL with parameters (控制器名 / 操作名称 / ID 参数)
            new { controller = "Home",  action = "Index", id = "" }  // Para

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号