概述

前面我们已经学习了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文件夹右击--添加---控制器

我要学ASP.NET MVC 3.0(五): 入手Controller/Action

我们可以看到上面的代码返回的是一个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";
}
}

效果

我要学ASP.NET MVC 3.0(五): 入手Controller/Action

 

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 3.0(五): 入手Controller/Action

 

 自动映射操作方法参数

 

ASP.NET MVC 框架可以将 URL 参数值自动映射到操作方法的参数值。

如果包含,则该请求值将自动传递给操作方法。

 

如下代码:

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

        //Url:
// /home/Detail?id=5
// /home/Detail/5
public string Detail(int id)
{
ViewData[
"DetailInfo"] = id;
return "获取的参数为: "+ViewData["DetailInfo"].ToString();
}

效果

我要学ASP.NET MVC 3.0(五): 入手Controller/Action

您也可以将参数值作为 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 有参数

 

我要学ASP.NET MVC 3.0(五): 入手Controller/Action

 

效果2 无参数

我要学ASP.NET MVC 3.0(五): 入手Controller/Action

总结

 

Controller就是负责将获取Model数据 并将Model传递给View对象.通知View对象显示.或者可以直接输出提示信息等。。。

在ASP.NET MVC中, 一个Controller可以包含多个Action. 每一个Action都是一个方法, 返回一个ActionResult实例.

ActionResult类包括ExecuteResult方法, 当ActionResult对象返回后会执行此方法.

 

http://www.cnblogs.com/lukun/  联系我,非常感谢。

相关文章:

  • 2021-09-22
  • 2021-06-09
  • 2022-01-01
  • 2021-11-05
  • 2021-09-21
  • 2021-11-07
  • 2021-12-25
猜你喜欢
  • 2021-12-06
  • 2022-02-01
  • 2022-12-23
  • 2021-09-22
  • 2022-12-23
  • 2021-09-08
  • 2022-01-09
相关资源
相似解决方案