所有 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
类型中。
下表显示了内置操作结果类型以及返回这些类型的操作帮助器方法。
将公共方法标记伪非操作方法
默认情况下,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 总结的一些知识,和大家一起分享下!也是刚刚接触,有不对的地方请谅解!
开发平台:VS2010_MVC3.0 MSSQL2008 用SQL2008附加文件夹“DataBase”里面的数据库“MailList.mdf” 用VS2010运行解决方案“MailList.sln”,调试运行就可使用了。 这个系统仅给刚开始学习ASP.NET MVC的新手参考的。...
作者:Nic Pei 来源:博客园ASP.NET MVC 3.0学习系列文章—序 Razor and ASP.NET MVC 3.0 ASP.NET MVC 3.0学习系列文章—Controllers in ASP.NET MVC 3.0 ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0 ...
ASP.MVC3.0中文版教程,可以通过学习此教程,快速入门学习
这个系统仅给刚开始学习ASP.NET MVC的新手参考的。 了解怎么使用Model,控制器,数据库实体和MVC2和MVC3在写法上的区别,转变使用控件的观念。 系统虽小,但基体架构还是有了,入门后你可以深入学习: 控制反转,...
MVC3.0 MVC NET ASP.MVC c# ASP.MVC3.0 学习资料
对于MVC初学者可以看里面的MVC2.0. 有经验的可以学习MVC3.0. 再者可以看看插件 ORM关于NHibernate的使用.文件写的狠详细,包括要添加的库文件我都包装好了.学习者绝对实用.
原来是用三层工厂模式架构 JQuery Ajax的模式做的一个简单权限管理系统,现在在这个基本上面又添加一个项目,用Asp.Net MVC3.0 Entity Framework来重新开发了一遍,视图引擎用了Aspx和Razor两种混合来编写,主要是...
快速学习ASP.MVC3.0,学习asp.net mvc的好教程
ASP.MVC3.0中文版教程 ASP.MVC3.0中文版教程
源码是基于asp.net mvc3.0 搭建的一个简单登录系统 登陆界面输入用户名和密码点击提交 控制层根据提交的信息把数据返回到view层并展示。 登陆成功页面展示出登陆信息。 对于有学习热情的人来说,这个登录是做得非常...
NHibernate +asp.net mvc 3.0 ,一个小小示例,仅供学习.
mvc3.0不错的学习代码,用vs2010,sql2005
MVC3.0 学习资料,数据库,源码,英文说明文档等。
MVC3.0中文版入门教程,零基础学习MVC,从头开始,慢慢的了解MVC的结构框架,是你不错的选择哦
在网上找了好久 终于把asp.net MVC3.0的知识点都总结下来了,希望大家都共同学习哦