FormCollection使用

FormCollection用来在controller中获取页面表单元素的数据。它是表单元素的集合,包括<input type="submit" />元素。

用法举例:

以下是使用Razor语法的一个表单:
[html] view plain copy
 
  1. @using (Html.BeginForm())  
  2. {  
  3.     @Html.TextBox("AAA")  
  4.     @Html.CheckBox("BBB")  
  5.     <input type="submit" name="submit" value="提交">  
  6. }  
提交到后台ActionResult为:
[csharp] view plain copy
 
  1. [HttpPost]  
  2. public ActionResult Index(FormCollection form)  
  3. {  
  4.     string a = form["AAA"];  
  5.     string b = form["BBB"];  
  6.     string c = form["submit"];  
  7.     return View();  
  8. }  

此时可以得到a="",b="false",c="提交"。要注意的是使用form["AAA"]得到的都是string,需要进行类型转换。

FormCollection和Request.Form的区别:

推荐大家使用FormCollection,原因有以下两点:

1.前者便于单元测试:

对于Action进行单元测试时,使用FormCollection作为输入参数,比Request.Form简单,书写如下代码即可模拟一个FormCollection:

 

[csharp] view plain copy
 
  1. var form = new FormCollection();  
  2. form.Add("fieldName","fieldValue");  

 

2.前者可支持MVC扩展:

Asp.net MVC在进行模型绑定时,会将用户输入绑定到FormCollection中,默认情况下,FormCollection中的内容与Request.Form一致,但是当我们自定义ModelBinder时,会影响FormCollection的取值,而Request.Form不会影响。这样如果我们在自定义ModelBinder时依旧使用Request.Form,自定义ModelBinder就毫无用处。

 

posted @ 2018-06-12 15:58  t101lian  阅读(6624)  评论(0编辑  收藏  举报