概述
前面我们已经学习了MVC的Routing路由规则,其接受Url请求后是根据所请求的Controller去匹配Action方法来执行操作的。
Controller之优
在未使用 MVC 框架的 ASP.NET 应用程序中,用户交互通常围绕以下方面来组织:
页面、由页面和页面控件引发的事件,以及处理页面和页面控件引发的事件。
相比之下,在 ASP.NET MVC 应用程序中,用户交互围绕控制器和操作方法进行组织。
控制器可根据需要包括多个操作方法。
在每种情况下,请求的 URL 均包含 MVC 框架用于调用操作方法的信息。
解析
当用户将 URL 输入到浏览器中时,MVC 应用程序会使用 Global.asax 文件中定义的路由规则来分析 URL 并确定控制器的路径。 Detail 方法。
基础概念
MVC怎么执行controller?
Controller 类通常会调用单独的视图组件以为请求生成 HTML 标记。
Controller 类负责以下处理阶段的工作:
-
查找要调用的相应操作方法,并验证是否可以调用该方法。
-
获取要用作操作方法的参数的值。
-
处理在执行操作方法期间可能发生的所有错误。
-
WebFormViewEngine 类。
提供用于响应对 ASP.NET MVC 网站所进行的 HTTP 请求的方法。
WebFormViewEngine 类
表示一个用于向响应呈现 Web 窗体页的视图引擎。
创建Controller
在解决方案的Controller文件夹右击--添加---控制器
我们可以看到上面的代码返回的是一个ActionResult类型的View,但是我们还没有建立与其对应的视图。。
所以我们要让他输出一个字符串到页面。。。
将代码
public ActionResult Index()
{
return View();
}
修改为
如下代码
表示一个简单的名为HomeController的Controller其中包含了一个名为Index的Action,向页面输出Hello Word。。。
public class HomeController : Controller
{
//
// GET: /Home/
public string Index()
{
return "Hello World";
}
}
效果
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) 的情况下所使用的返回值。 |
非Action方法
NonActionAttribute 特性标记该方法。
NonAction 特性标记的方法。
NonActionAttribute 类
表示一个特性,该特性用于指示控制器方法不是操作方法。
[NonAction]
private void DoSomething()
{
// Method logic.
}
含有参数的Action方法
数据收集包括窗体数据名称-数值对、查询字符串值和 cookie 值。
否则会引发异常。
获取参数
通过使用这些基类,可以轻松地创建 mock 对象,这样,又可以轻松地为 controller 类创建单元测试。
如下代码
示例演示如何使用 Request 对象检索名为 id 的查询字符串值。
//Url:
// /home/Detail?id=5
public string Detail()
{
var id = Convert.ToInt32(Request["id"]);
return "收到的参数为"+id.ToString();
}
效果
自动映射操作方法参数
ASP.NET MVC 框架可以将 URL 参数值自动映射到操作方法的参数值。
如果包含,则该请求值将自动传递给操作方法。
如下代码:
演示上面示例的变体。 由于此自动映射的缘故,操作方法不必包括用于从请求中获取参数值的代码,因此,参数值更易于使用。
//Url:
// /home/Detail?id=5
// /home/Detail/5
public string Detail(int id)
{
ViewData["DetailInfo"] = id;
return "获取的参数为: "+ViewData["DetailInfo"].ToString();
}
效果
您也可以将参数值作为 URL 的一部分而不是作为查询字符串值嵌入。 id 的参数,并自动将其作为参数值传递给操作方法。
例如,如果方法可以采用日期作为查询字符串的一部分,但是您希望在缺少查询字符串参数的情况下默认值为当天日期,则可以使用与以下示例中的代码相似的代码:
null,并且控制器可以采用所需的任何操作以处理缺少的形参。
代码如下
//Url:
// /home/ShowArticles?date=2011-11-11
// /home/ShowArticles
public string ShowArticles(DateTime? date)
{
if (!date.HasValue)
{
date = DateTime.Now;
}
return "日期参数为: "+date.Value.ToString();
}
效果1 有参数
效果2 无参数
总结
Controller就是负责将获取Model数据 并将Model传递给View对象.通知View对象显示.或者可以直接输出提示信息等。。。
在ASP.NET MVC中, 一个Controller可以包含多个Action. 每一个Action都是一个方法, 返回一个ActionResult实例.
ActionResult类包括ExecuteResult方法, 当ActionResult对象返回后会执行此方法.
http://www.cnblogs.com/lukun/ 联系我,非常感谢。