本文共 5227 字,大约阅读时间需要 17 分钟。
目录
1.路由传参
视图传参代码:
路由传值
控制器代码:
public ActionResult ChuanZhi_LuYou() { /* * =========【取值方法一(获取路由信息)】========= * RouteData.Values["id"] * RouteData.Values["变量"] 获取路由信息 * */ /* * ViewData["Request_id"] * ViewBag.Request_id (动态类型) * 向视图传递参数有ViewData["变量"]和ViewBag."变量"两种 * */ ViewBag.RouteData_Values_id = RouteData.Values["id"].ToString(); return View(); }
视图取参代码:
路由传值
ViewBag.RouteData_Values_id=@ViewBag.RouteData_Values_id
2.“问号?”传参
视图传参代码:
控制器代码:
public ActionResult ChuanZhi_WenHao() { /* * =========【取值方法二(获取"?"问号传参)】========= * Request["id"].ToString(); * Request["变量"]取值方式可以获取get和post两种 * =========【取值方法三(获取"?"问号传参)】========= * Request.QueryString["id"] * */ /* * ViewData["Request_id"] * ViewBag.Request_id (动态类型) * 向视图传递参数有ViewData["变量"]和ViewBag."变量"两种 * */ ViewData["Request_id"] = Request["id"].ToString(); ViewBag.Request_id = Request["id"].ToString(); ViewData["Request_QueryString_id"] = Request.QueryString["id"]; ViewBag.Request_QueryString_id = Request.QueryString["id"]; return View(); }
视图取参代码:
?传值
ViewData["Request_id"]=@ViewData["Request_id"]
ViewBag.Request_id=@ViewBag.Request_id
ViewData["Request_QueryString_id"]=@ViewData["Request_QueryString_id"]
ViewBag.Request_QueryString_id=@ViewBag.Request_QueryString_id
3.表单form传参
视图传参代码:
form 传值
控制器代码:
public ActionResult ChuanZhi_BiaoDan() { /* * ViewData["Request_id"] * ViewBag.Request_id (动态类型) * 向视图传递参数有ViewData["变量"]和ViewBag."变量"两种 * */ ViewBag.UserName = Request["UserName"].ToString(); ViewBag.UserPassword= Request["UserPassword"].ToString(); return View(); }
视图取参代码:
form 传值
ViewBag.UserName=@ViewBag.UserName
ViewBag.UserPassword=@ViewBag.UserPassword
4.通过route特性路由传参
#region ==============通过route特性路由传参=============== /*【必须】启用路由特性映射 * MVC5可以通过路由配置文件(App_Start/RouteConfig.cs)增加下面代码 * routes.MapMvcAttributeRoutes(); */ ////// 通过route特性路由传参[string] /// 访问:http://localhost:53676/ChuanZhi/c_string/xiaoming /// ///[Route("ChuanZhi/c_string/{name}")] public string ceshi_string(string name) { string status = string.Empty; status = name; return status; } /// /// 通过route特性路由传参[int] 参数不可空 /// 访问:http://localhost:53676/ChuanZhi/c_int/1 /// ///[Route("ChuanZhi/c_int/{proid:int}")] public string ceshi_int(int proid) { int sum=proid+proid; return $"{proid}+{proid}={sum}"; } /// /// 通过route特性路由传参[int] 参数可空 /// 访问:http://localhost:53676/ChuanZhi/c_int/1 /// ///[Route("ChuanZhi/c_int2/{proid?}")] public string ceshi_int2(int proid=1) { int sum=proid+proid; return $"{proid}+{proid}={sum}"; } #endregion
5.重点FormCollection使用
概述:
FormCollection用来在controller中获取页面表单元素的数据。它是表单元素的集合,包括<input type="submit" />元素。
用法举例:
以下是使用Razor语法的一个表单:
@using (Html.BeginForm()){ @Html.TextBox("AAA") @Html.CheckBox("BBB") }
提交到后台ActionResult为:
[HttpPost]public ActionResult Index(FormCollection form){ string a = form["AAA"]; string b = form["BBB"]; string c = form["submit"]; return View();}
画重点
[HttpPost] //只接受Post提交
[ValidateInput(false)]//取消验证 ,主要是忽略:提交过来的表单携带的HTML代码 public ActionResult Index(FormCollection form) { string a = form["AAA"]; string b = form["BBB"]; string c = form["submit"]; return View(); }
此时可以得到a="",b="false",c="提交"。要注意的是使用form["AAA"]得到的都是string,需要进行类型转换。
FormCollection和Request.Form的区别:
推荐大家使用FormCollection,原因有以下两点:
1.前者便于单元测试:
对于Action进行单元测试时,使用FormCollection作为输入参数,比Request.Form简单,书写如下代码即可模拟一个FormCollection:
var form = new FormCollection();form.Add("fieldName","fieldValue");
2.前者可支持MVC扩展:
Asp.net MVC在进行模型绑定时,会将用户输入绑定到FormCollection中,默认情况下,FormCollection中的内容与Request.Form一致,但是当我们自定义ModelBinder时,会影响FormCollection的取值,而Request.Form不会影响。这样如果我们在自定义ModelBinder时依旧使用Request.Form,自定义ModelBinder就毫无用处。
什么是ModelBinding
ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应。为了能够正确处理请求,Action的参数(如果有的话),必须在Action执行之前,根据相应的规则,把请求中所包含的数据提取出来并将映射为Action的参数值,这个过程就是ModelBinding。ModelBinding的作用就是为Action提供参数列表。
ModelBinding的好处
使代码变得更加简洁
帮助我们获取HTTP请求中的数据
帮助我们完成必要的数据类型转换
详细介绍
标题:ASP.NET MVC5 ModelBinder
url:
转载:FormCollection使用:
视图赋值
向视图传递参数有ViewData["变量"]和ViewBag."变量"两种。
例如上面的ViewData["Request_id"]和ViewBag.Request_id,无论是双引号(“”)里的Request_id还是(.)后面的Request_id都是自定义的。最规范的命名方式是根据参数命名。
/*
* ViewData["Request_id"] * ViewBag.Request_id (动态类型) * 向视图传递参数有ViewData["变量"]和ViewBag."变量"两种 * */ViewData :字典传值,里面是object,需要类型转换
ViewBag: dynamic(动态)传值,可以随便属性访问,运行时检测 以上二者是会覆盖的,以后者为准 model:适合复杂数据的传递,强类型 TempData:临时数据,可以跨action后台传递,存在session里面,用一次就清掉
转载地址:https://cplvfx.blog.csdn.net/article/details/100926846 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!