ASP.NET MVC框架之控制器Controller(五) - TOMMYHU - 专注互联网开发及运营技术,提供相关资料及软件下载,奇趣网络时事评论!
Sep 15

ASP.NET MVC框架之控制器Controller(五) 不指定

一,基本概念:
控制器涉及的内容有三部分: 控制器(Controller) 、控制器方法(Action)和 控制器结果(ActionResult)。

传统的Web框架,如ASP/PHP/ASP.NET Web Forms 等等,请求的URL 地址都是映射到特定的文件。如,请求的URL 地址,像/Products.aspx 或/Products.php,由 Products.aspx 或Products.php 文件负责处理。基于Web的MVC框架 映射URL地址 到服务器端代码有点不同,不是映射URL 地址到特定文件,而是映射到类的方法上。这些类就是MVC 中的 Controller 控制器,它们负责处理进来的请求和用户输入,接收和保存数据,并返回结果给客户端(显示HTML、下载文件、或重定向到不同的URL 等等)。

二,控制器(Controller):
右键点击Web 项目中的Controllers 文件夹,选择 添加(Add) ->控制器(Controller),如下图所示。
Highslide JS
在弹出的Add Controller 对话框,控制器名称输入GuestBookController,点击Add 按钮。ok,我们已经在项目文件中添加了GuestBookController.cs 文件。
Highslide JS
代码如下:

    public class GuestBookController : Controller
    {
        //
        // GET: /GuestBook/

        public ActionResult Index()
        {
            return View();
        }

     }

注意:约定控制器必须以Controller结尾,样式为xyzController.cs。

三,Action方法:

1,能够通过URL访问的Action必须是公有(public)方法;

2,如果标记了[NonAction]属性,则不能通过URL访问;
       例如:

        [NonAction]
        public ActionResult Index()
        {
            return View();
        }
不能通过GuestBook/Index来访问了。

3,默认情况下,Action的方法名就是Action名,Action名指可以通过URL访问的名称。
如有需要,您可以指定Action名。例如:

         [ActionName("Default")]
        public ActionResult Index()
        {
            return View("Index");//改变了Action名,就要指定视图名称,不指定就会显示Default视图文件。
        }

这样,您可以通过GuestBook/Default来访问这个Action了。

4,还有两个常用的属性是[HttpPost]和[HttpGet]。例如:

        [HttpPost]
        public ActionResult Index()
        {
            return View();
        }

表示该方法负责处理Http Post动作。
也可以通过 [AcceptVerbs(HttpVerbs.Post)]来设置,[HttpPost]效果一样,只是方便快速开发。
当对重载的action 方法添加[HttpPost] 属性后,ASP.NET MVC 根据进来的HTTP 动作,自动分发请求
给合适的action 方法。例如:

       [HttpPost]
        [ActionName("Index")]
        public ActionResult IndexPost()
        {
            return View();
        }
        
        public ActionResult Index()
        {
            return View("Index");
        }

URL请求GuestBook/Index时,如果是Http Post请求,则由名称为IndexPost的方法执行;其它的请求,则由名称为Index的方法执行。

如果想了解post和get以外更多的参数,请参考(英文):
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
或者搜索AcceptVerbs。

5,过滤器属性Action Filter:

可以放置在Action上的另一种类型的属性是过滤器(Filter)。
使用过滤器可以添加缓存、 验证和错误处理。
例如[HandleError]属性。

我们先去掉上图中的[HandleError]属性,然后添加如下代码:
      public ActionResult HandleError()
        {
            throw new Exception("出现异常");
        }

访问Home/HandleError,出现如下图,异常页面暴露了部分源代码,给网站安全带来隐患。
Highslide JS

现在,我们设置 [HandleError]属性。

    [HandleError]
    public class HomeController : Controller

然后,在web.config中找到节,把mode设置为"On",去掉注释。如下图。

再次运行Home/HandleError,会显示Shared目录下的Error.aspx个性化异常页面。

Highslide JS

这是一个过滤器的例子,更多的内容我们将在后面过滤器的章节中详细说明。

注意:可以将此属性应用于单独的一个Action方法上,或者Controller类上,这样它可以应用于这个控制器类的所有Action.

6,Action方法的参数:
例如URL为:GuestBook/Index/12345,
Index这个Action的代码为:

        public ActionResult Index(int id)
        {
           int myid=id;
            return View("Index");
        }
我们调试此URL,就会发现,myid的值是12345。
我们并没有使用类似int id = Convert.ToInt32(Request["id"]);的代码。

这是因为:
默认情况下,action方法的参数值从请求的数据集合中检索。
数据集包括,Form、URL Routing Data、QueryString、cookie values等等。
Action 参数的数据首先会从当前请求的form表单中取值,之后是route解析过的route values,最后是从QueryString中取得所前面没有重复出现过的值。重复出现的以最先取的值为优先。

四,控制器结果(ActionResult):

1,成功执行 MVC 控制器操作会产生从 ActionResult 派生的对象。

2, ActionResult 派生类型包括:

ViewResult. 呈现视图页给客户端。由View 方法返回.
EmptyResult. 不写入HTTP 响应。
RedirectResult. 重定向到另外一个URL。由 Redirect 方法返回.
RedirectToRouteResult. 重定向到另外一个Route。由RedirectToAction 和RedirectToRoute 方法返回.
FileContentResult,表示一个可下载的文件,有File方法返回.
ContentResult.将动作结果作为纯文本返回。由 Content 方法返回.
JsonResult. 返回JSON结果。由 Json 方法返回.
JavaScriptResult.返回一个JavaScript对象,由JavaScriptResult方法返回。

3,你也可创建返回任何类型的action方法,如字符串、整数、或布尔值等等。在这些返回值呈现给返回流之前,将封装为合适的ActionResult类型。例如,如果设置返回类型为string或日期,会自动转换为ContentResult类型结果返回。

下一节中我们将介绍视图。

--------------------------------------------------------------------------
参考资料:

终极 ASP.NET(英文)
http://msdn.microsoft.com/zh-cn/magazine/dd695917.aspx
ASP.NET MVC框架开发系列课程(5):控制器(Controller)以及Action (Level 200)
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032378264&Culture=zh-CN
一步一步学asp.net_mvc_中文版.pdf
http://wenku.baidu.com/view/2be68e6a561252d380eb6e0a.html
MVC 中的控制器和Action方法
http://forum.entlib.com/Default.aspx?g=posts&t=935
MVC 中的控制器和Action方法(英文原文)
http://msdn.microsoft.com/en-us/library/dd410269(VS.100).aspx
ASP.NET MVC :Action参数绑定的数据源优先顺序
http://www.cnblogs.com/hjf1223/archive/2010/03/14/mvc_action_parametervalues_order.html

asp.net http://hi.baidu.com/wikiweb/blog/item/f92ed53fff2796ce7c1e7101.html

▲返回顶部
Last modified by tommyhu on2010/09/15 21:30

互联网开发网友 Email Homepage
2012/07/26 22:43
The first day of the spring 2012 collections brought lots of vivid brights — bubble-gum pinks at Cushnie et Ochs, melon-colored prints at Gary Graham, and aqua lips at Richard Chai, to give a few examples. We've also got close-up shots of Rachel Comey's adorable straw hats, BCBG Max Azria's bright blue clutches, and Steven Alan's perfect flat sandals in our details galleries, plus party photos, backstage shots, and much more.
RUNWAY
• Cushnie et Ochs
• Duckie Brown
• Gary Graham
Pages: 1/1 First page 1 Final page
Add a comment

Nickname

emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot