原文:https://blog.csdn.net/lxrj2008/article/details/79455360


ASP.NET mvc的Controller要正确的响应用户发出的请求就要获取到用户输入值和传递的参数信息,比如:查询参数的值,提交的表单的值或者通过路由系统从URL中获取的值等等。在ASP.NET MVC中有三种方式来获取访问这些值:

1、从Controller的上下文获取

2、从Action参数中获取

3、利用ASP.NET MVC的model 绑定特性

一、从Controller的上下文对象获取参数值

一旦创建的Controller是从基类Controller中继承的就可以通过Controller的上下文获取参数信息,基类Controller我们提供了很多属性: Request,  Response ,  RouteData,  HttpContext, and  Server,每一个属性都是Controller的上下文对象,它们各针对不同方面信息。利用这些对象可以获取到当前请求的相关变量的值。

比如下面的一个Action方法:

public ActionResult RenameProduct() {
// 通过上下文对象获取变量的值
string userName = User.Identity.Name;
string serverName = Server.MachineName;
string clientIP = Request.UserHostAddress;
DateTime dateStamp = HttpContext.Timestamp;
AuditRequest(userName, serverName, clientIP, dateStamp, "Renaming product");
// 通过上下文的请求对象获取表单提交的参数值
string oldProductName = Request.Form["OldName"];
string newProductName = Request.Form["NewName"];
bool result = AttemptProductRename(oldProductName, newProductName);
ViewData["RenameResult"] = result;
return View("ProductRenamed");
}

二、通过Action参数中获取参数值

在Controller的Action方法可以带有参数,ASP.NET MVC框架会自动从请求的上下文中提取这些参数的值分别对应到Action的参数。这也是可读性最好和最简介的方式。

假设之前我们是通过请求下文对象来获取参数的值:

public ActionResult ShowWeatherForecast() {
string city = (string)RouteData.Values["city"];
DateTime forDate = DateTime.Parse(Request.Form["forDate"]);
// ... implement weather forecast here ...
return View();
}
接下来我们可能通过Action参数对上面进行改进:
public ActionResult ShowWeatherForecast(string city, DateTime forDate) {
// ... implement weather forecast here ...
return View();
}
可以看出采用通过Action参数的方式大大的减少了代码量和提高了可读性。使用参数的形式还有一个好处是利于单元测试,因为我们不用创建一个RouteData和Request对象,直接传递对应参数就可以测试。MVC框架通过检查请求上下文对象为这些参数提供值,其中包括以下集合: Request.QueryString, Request.Form , RouteData.Values 注意:Action参数是不区分大小写的,比如:Action有一个参数为city,我们可以通过Request.Form["City"]获取到值。

三、利用ASP.NET MVC的model绑定特性获取参数值

基类Controller设置Action参数的值是通过MVC框架中的value providers和model binders两个组件完成的。MVC框架内置的value providers通过从集合, Request.Form,  Request.QueryString,  Request.Files, 和RouteData.Values获取值,然后传递给model binders分别映射到我们的Action相应的参数中去。默认的model binders就可以映射任何的.NET类型的参数,包括基本类型、集合类型和自定义的类。你可以看看我之前写的:ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例,以后我会详细的介绍ASP.NET MVC的model绑定特性。

【部分】ASP.NET MVC的Controller接收输入详解的更多相关文章

  1. Asp.Net MVC学习总结之过滤器详解(转载)

    来源:http://www.php.cn/csharp-article-359736.html   一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...

  2. ASP.NET MVC学习之模型验证详解

    ASP.NET MVC学习之模型验证篇 2014-05-28 11:36 by y-z-f, 6722 阅读, 13 评论, 收藏, 编辑 一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们 ...

  3. Asp.Net MVC 扩展 Html.ImageFor 方法详解

    背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelper却无法输出一个img,当用脚手架自动生成一些form或表格的时候, ...

  4. ASP.NET MVC控制器Controller中参数

    前述文章参见:ASP.NET MVC控制器Controller 绪论 之前的控制器返回的均为常量字符串,接下来展示如何获取请求传来的参数,而返回"动态"的字符串. 可以在操作方法B ...

  5. Asp.net MVC 中Controller返回值类型ActionResult

    [Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...

  6. 返璞归真 asp.net mvc (3) - Controller/Action

    原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...

  7. ASP.NET MVC中controller和view相互传值的方式

    ASP.NET MVC中Controller向view传值的方式: ViewBag.ViewData.TempData 单个值的传递 Json 匿名类型 ExpandoObject Cookie Vi ...

  8. ASP.NET MVC Controller激活系统详解1

    一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...

  9. [置顶] MVC输出缓存(OutputCache参数详解)

    1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...

随机推荐

  1. JavaSE (四)程序流程控制 -- if 、switch、for、while

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 目录 前置: * . 从键盘读取数据: 1.分支结构 1.1 if-else结构 1.2 switch- ...

  2. Java实现 LeetCode 575 分糖果(看看是你的长度小还是我的种类少)

    575. 分糖果 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果.你需要把这些糖果平均分给一个弟弟和一个妹妹.返回妹妹可以获得的最大糖果的种类数. 示例 1: 输入 ...

  3. Java实现 LeetCode 437 路径总和 III(三)

    437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...

  4. Linux链接命令及软链接、硬链接详解

    命令ln详解 命令ln,所在路径为: 可以看到,它的路径为:/usr/bin/ln,因此,它的执行权限是所有用户 命令的基本功能是创建链接文件(硬链接),例如:ln /etc/issue /tmp 选 ...

  5. 读懂操作系统之缓存原理(cache)(三)

    前言 本节内容计划是讲解TLB与高速缓存的关系,但是在涉及高速缓的前提是我们必须要了解操作系统缓存原理,所以提前先详细了解下缓存原理,我们依然是采取循序渐进的方式来解答缓存原理,若有叙述不当之处,还请 ...

  6. k8s学习-pod生命周期

    4.2.pod生命周期 创建一个pod的时候过程如下: 1.容器环境初始化: 2.pause执行网络.容器卷等初始化工作: 3.所有的InitC按顺序执行,每个InitC执行完后才能执行下一个,且必须 ...

  7. PMBOK 基础知识(1)

    启动.结束过程 项目管理计划 第一章  引论 第2章项目运行环境 第3章 项目经理的角色 第4章 项目整合管理 第5章 项目范围管理 第6章 项目进度管理 第7章 项目成本管理 第8章 项目质量管理  ...

  8. django——bbs

    今日内容概要 bbs是一个前后端不分离的全栈项目,前端和后端都需要我们自己一步步的完成 表创建及同步 注册功能 forms组件 用户头像前端实时展示 ajax 登陆功能 自己实现图片验证码 ajax ...

  9. 杨辉三角 js 练习

    //打印杨辉三角a[[],[],[]] function fn(n){ //i=0 1 2 3.. var a = new Array(n); //行 1 2 3 4.. 创建二维数组. for(va ...

  10. hiredis window 源码编译

    编译工具 cmake mingw730_32 版本 hiredis:0.15 cmake: cmake-3.12.4-win64-x64 mingw: 7.3.0 make配置 注意:D:\Qt\Qt ...