`
牛牛2011
  • 浏览: 3607 次
  • 性别: Icon_minigender_2
  • 来自: 洛阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习MVC3.0

阅读更多

所有 controller 类都必须使用“Controller”后缀来命名

ASP.NET MVC 应用程序中的控制器和操作方法

在未使用 MVC 框架的 ASP.NET 应用程序中,用户交互通常围绕以下方面来组织:页面、由页面和页面控件引发的事件,以及处理页面和页面控件引发的事件。 相比之下,在 ASP.NET MVC 应用程序中,用户交互围绕控制器和操作方法进行组织。 控制器定义操作方法。 控制器可根据需要包括多个操作方法。

操作方法与用户交互之间通常具有一对一映射关系。 例如,用户交互包括将 URL 输入到浏览器中、单击链接以及提交表单。 这些用户交互中的每一项都会将请求发送给服务器。 在每种情况下,请求的 URL 均包含 MVC 框架用于调用操作方法的信息。

当用户将 URL 输入到浏览器中时,MVC 应用程序会使用 Global.asax 文件中定义的路由规则来分析 URL 并确定控制器的路径。 然后,该控制器会确定合适的操作方法来处理请求。 默认情况下,请求的 URL 被视为一个子路径,该子路径包含后面跟有操作名称的控制器名称。 例如,如果用户输入 URL http://contoso.com/MyWebSite/Products/Categories ,则子路径为 /Products/Categories 默认路由规则将“Products”视为控制器的前缀名称(末尾必须为“Controller”,例如 ProductsController )。 它将“Categories”视为操作的名称。 因此,该路由规则将调用 Products 控制器的 Categories 方法来处理请求。 如果 URL 以 /Products/Detail/5 结尾,则默认的路由规则将“Detail”视为操作的名称,并且调用 Products 控制器的 Detail 方法来处理请求。 默认情况下,此 URL 中的值“5”将作为参数传递给 Detail 方法。

 

ActionResult返回类型

大多数操作方法会返回从 ActionResult 中派生的类的实例。 ActionResult 类是所有操作结果的基础。 不过,也存在不同的操作结果类型,具体取决于操作方法执行的任务。 例如,最常见的操作是调用 View 方法。 View 方法返回从 ActionResult 中派生的 ViewResult 类的实例。

您可以创建返回任意类型(如字符串、整数或布尔值)的对象的操作方法。 这些返回类型在呈现到响应流之前包装在合适的 ActionResult 类型中。

下表显示了内置操作结果类型以及返回这些类型的操作帮助器方法。

操作结果

帮助器方法

描述

ViewResult

View

将视图呈现为网页。

PartialViewResult

PartialView

呈现分部视图,该分部视图定义可呈现在另一视图内的某视图的一部分。

RedirectResult

Redirect

使用其 URL 重定向到另一操作方法。

RedirectToRouteResult

RedirectToAction

RedirectToRoute

重定向到另一操作方法。

ContentResult

Content

返回用户定义的内容类型。

JsonResult

Json

返回序列化的 JSON 对象。

JavaScriptResult

JavaScript

返回可在客户端上执行的脚本。

FileResult

File

返回要写入响应中的二进制输出。

EmptyResult

(无)

表示在操作方法必须返回 null 结果 (void) 的情况下所使用的返回值。

将公共方法标记伪非操作方法

默认情况下,mvc框架将Controller类的所有公共方法都视为操作方法如果Controller类包含公共方法,并且不希望它成为操作方法,则必须用NonActionAttribute特性标记该方法。

[NonAction]

操作方法参数

默认情况下,操作方法参数的值是从请求的数据收集中检索到的。 数据收集包括窗体数据名称-数值对、查询字符串值和 cookie 值。

Controller 类将查找操作方法并根据 RouteData 实例和窗体数据确定该操作方法的所有参数值。 如果无法分析参数值,并且参数类型为引用类型或可以为 null 值的类型,则 null 将作为参数值传递。 否则会引发异常。

可以采用多种方法访问 controller 类操作方法中的 URL 参数值。 Controller 类将公开可在操作方法中访问的 Request Response 属性。 这些属性与已为 ASP.NET 的一部分的 HttpRequest HttpResponse 对象具有相同的语义。 但是,Controller 类的 Request Response 对象将接受实现 HttpRequestBase HttpResponseBase 抽象类(而不是成为密封类)的对象。 通过使用这些基类,可以轻松地创建 mock 对象,这样,又可以轻松地为 controller 类创建单元测试。

下面的示例演示如何使用 Request 对象检索名为 id 的查询字符串值。

public
 void
 Detail()
{
    int
 id = Convert.ToInt32(Request["id"
]);
}

自动映射操作方法参数

ASP.NET MVC 框架可以将 URL 参数值自动映射到操作方法的参数值。 默认情况下,如果操作方法采用参数,则 MVC 框架将检查传入的请求数据并确定该请求是否包含同名的 HTTP 请求值。 如果包含,则该请求值将自动传递给操作方法。

下面的示例演示上面示例的变体。 在此变体中,假定 id 参数映射到名称也为 id 的请求值。 由于此自动映射的缘故,操作方法不必包括用于从请求中获取参数值的代码,因此,参数值更易于使用。

 

public
 ResultAction Detail(int
 id)
{
    ViewData["DetailInfo"
] = id;
    return
 View();
}

您也可以将参数值作为 URL 的一部分而不是作为查询字符串值嵌入。 例如,您可以使用 /Products/Detail/3 之类的 URL,而不是使用包含查询字符串的 URL,如 /Products/Detail?id=3 默认路由映射规则的格式为 /{controller}/{action}/{id} 如果 URL 中控制器和操作名称后面存在 URL 子路径,则会将该子路径视为名为 id 的参数,并自动将其作为参数值传递给操作方法。

MVC 框架还支持操作方法的可选参数。 MVC 框架中的可选形参是使用控制器操作方法的可以为 null 类型的实参处理的。 例如,如果方法可以采用日期作为查询字符串的一部分,但是您希望在缺少查询字符串参数的情况下默认值为当天日期,则可以使用与以下示例中的代码相似的代码:

public
 ActionResult ShowArticles(DateTime? date)
{
    if
(!date.HasValue)
    {
        date = DateTime.Now;
    }
    // ...

}  

如果请求包括日期参数的值,则该值将传递给 ShowArticles 方法。 如果请求不包含此形参的值,则实参为 null ,并且控制器可以采用所需的任何操作以处理缺少的形参。

 

 

 

分享到:
评论

相关推荐

    MVC3.0安装文件

    在本压缩包中,你将找到进行MVC3.0开发所需的两个关键组件:主程序和语言包。 1. **MVC 模式介绍** Model-View-Controller模式是一种广泛应用于Web应用开发的设计模式,它将业务逻辑、数据处理和用户界面分离开来...

    MVC3.0学习资料

    **ASP.NET MVC 3.0 学习指南** ...这份"ASP[1].MVC3.0中文版教程.doc"文档应包含上述所有内容的详细解释和示例,是学习MVC3.0的宝贵资源。在阅读过程中如有任何疑问,随时提问,我将在线为你解答。

    ASPMVC3.0中文版教程

    通过这个ASP.NET MVC 3.0中文版教程,学习者可以全面了解和掌握MVC 3.0的各种特性和用法,无论是初学者还是有经验的开发者,都能从中受益,提升Web开发技能。教程中将详细讲解这些知识点,并通过实例演示如何在实际...

    MVC3.0安装文件(中文补丁)

    **ASP.NET MVC 3.0** 是微软推出的一款用于构建Web应用程序的框架,它基于Model-View-Controller(MVC)设计模式,是ASP.NET平台的一部分。...开发者可以通过学习和熟练掌握MVC3.0,提高其在Web开发领域的专业技能。

    ASP.NET MVC3.0 高级编程

    深入学习这些知识点,将帮助开发者在ASP.NET MVC3.0平台上构建出高效、可扩展的Web应用程序。通过阅读《ASP.NET MVC3.0 高级编程》这本书,你可以获取更多关于这些主题的详细信息,掌握实际开发中的最佳实践。

    MVC3.0 细解-部分实例

    ### MVC3.0详解——核心概念与新特性 MVC3.0,即Model-View-Controller架构的第三版,在其前两个版本的基础上进行了大幅度的优化...对于想要深入学习MVC3.0的开发者来说,掌握这些核心概念和新特性是必不可少的步骤。

    MVC3.0自学教材【非常详细】适合初学者

    学习MVC3.0不仅能够帮助开发者掌握Web应用程序的设计和开发,还能为后续学习更高级的MVC版本(如MVC4、MVC5)打下坚实的基础。通过实际动手实践,结合理论知识,你将能够构建出功能完备、易于维护的Web应用程序。

    asp.net mvc 3.0 demo

    通过这个演示,学习者能够深入理解ASP.NET MVC 3.0的工作原理,并掌握如何运用它来构建高效、可扩展的Web应用。 "MyFinance"这个文件名可能是项目的一个模块,可能代表财务管理的示例应用,包含账户管理、交易记录...

    music store MVC3.0

    学习MVC3.0时,你需要理解以下几个关键概念: - **路由**:ASP.NET MVC中的路由系统允许自定义URL模式,使URL更具描述性和SEO友好。 - **控制器**:处理HTTP请求,调用模型逻辑,并选择适当的视图进行渲染。 - **...

    ASP.MVC3.0

    ASP.MVC3.0中文版教程,可以通过学习此教程,快速入门学习

    ASP.NET MVC3.0简单例子

    开发平台:VS2010_MVC3.0 MSSQL2008 用SQL2008附加文件夹“DataBase”里面的数据库“MailList.mdf” 用VS2010运行解决方案“MailList.sln”,调试运行就可使用了。 这个系统仅给刚开始学习ASP.NET MVC的新手参考的。...

    ASP.MVC3.0中文版教程

    ### ASP.NET MVC 3.0 中文版教程关键知识点总结 #### 一、ASP.NET MVC 概述 ...通过以上详细解析,初学者可以更好地理解和掌握ASP.NET MVC 3.0的核心技术和应用场景,为进一步深入学习打下坚实基础。

    效率日志 MVC3.0 项目源码

    这个项目提供了完整的源代码,适用于学习MVC 3.0架构,以及如何构建高效的工作日志系统。以下是关于这个项目及其相关技术的详细知识点: 1. **Asp.Net MVC**:MVC(Model-View-Controller)是一种设计模式,用于将...

    MVC3.0快速入门

    记住,理论结合实践是最佳的学习路径,尝试创建自己的小项目,不断探索和学习MVC3.0的更多功能和最佳实践。在实践中遇到问题时,不要忘了查阅官方文档、社区论坛和在线教程,它们将是你宝贵的资源。

    我要学ASP.NET MVC3.0

    ### ASP.NET MVC 3.0的关键知识点 #### 一、MVC 3.0的新特性 MVC(Model-View-Controller)模式是...通过上述内容的学习,可以全面掌握ASP.NET MVC 3.0的核心概念和技术要点,为进一步深入学习和开发奠定坚实的基础。

    ASP.NET+MVC3.0 + EF增删改查

    这个系统仅给刚开始学习ASP.NET MVC的新手参考的。 了解怎么使用Model,控制器,数据库实体和MVC2和MVC3在写法上的区别,转变使用控件的观念。 系统虽小,但基体架构还是有了,入门后你可以深入学习: 控制反转,...

    asp.net VS2008+MVC3.0开发

    要进行VS2008+MVC3.0开发,你需要确保已经安装了Visual Studio 2008 SP1,并且下载并安装了ASP.NET MVC 3.0框架。这个框架通常以NuGet包的形式提供,需要在项目中进行添加。一旦安装完成,你可以创建一个新的ASP.NET...

    asp.net MVC 3.0

    此外,“ASP.MVC3.0中文版教程.pdf”、“精通MVC3框架.pdf”和“ASP.NET MVC3教程2011最新版(razor视图).pdf”将深入探讨更多高级话题,进一步提升你的开发技能。总之,ASP.NET MVC 3.0是一个强大且灵活的开发平台...

    asp.net MVC3.0 中文教程

    ASP.NET MVC 3.0是微软开发的一个开源框架,用于构建可维护性和可测试性高的Web应用程序。...通过学习这个中文教程,你可以深入理解MVC架构,掌握C#和Razor的使用,以及如何利用ASP.NET MVC 3.0构建高效Web应用程序。

Global site tag (gtag.js) - Google Analytics