MVC 3.0学习笔记(Controls)

本文解析了MVC模式中Controller的工作原理,介绍了如何通过URL映射到控制器类,控制器如何处理请求及参数获取方式,并展示了多种操作结果类型及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Controller解析

 

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

ASP.NET MVC 框架可将 URL 映射到称为“controllers”的类。 控制器将处理传入的请求,处理用户输入和交互,并执行相应的应用程序逻辑。 Controller 类通常会调用单独的视图组件以为请求生成 HTML 标记。

适用于所有控制器的基类为 ControllerBase 类,该类可进行普通的 MVC 处理。 Controller 类从 ControllerBase 中继承并且是控制器的默认实现。 Controller 类负责以下处理阶段的工作:

  • 查找要调用的相应操作方法,并验证是否可以调用该方法。

  • 获取要用作操作方法的参数的值。

  • 处理在执行操作方法期间可能发生的所有错误。

  • 提供用于呈现 ASP.NET 页面类型(视图)的默认 WebFormViewEngine 类。(表示一个用于向响应呈现 Web 窗体页的视图引擎。

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) 的情况下所使用的返回值。

 

非Action方法

 

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

下面的示例演示用 NonAction 特性标记的方法。

NonActionAttribute 类

表示一个特性,该特性用于指示控制器方法不是操作方法。

[NonAction]
private void DoSomething()
{
    // Method logic.

 

Action方法

获取参数

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

如下代码

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

复制代码
       //Url:
       // /home/Detail?id=5
        public string Detail()
        {
            var id = Convert.ToInt32(Request["id"]);
            return "收到的参数为"+id.ToString();
        }
复制代码

URL:~/home/Detail?id=5   采用Request["id"]获取对应的值

 

 自动映射操作方法参数:

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

URL:~/home/Detail/5 (或者URL:~/home/Detail/5 ) 采用Control中处理方法Detail的参数自动识别id,ViewData是字典集合,用在MVC 2.0中,现在MVC3.0也可以使用,不过MVC3.0有更好的新成员可以代替:ViewDug.DetailInfo和字典有异曲同工之妙

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

如果请求包括日期参数的值,则该值将传递给 ShowArticles 方法。 如果请求不包含此形参的值,则实参为 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();
        }
复制代码

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

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

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

 

学习参考网址:http://www.cnblogs.com/lukun/archive/2011/07/25/2113952.html

 

 

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值