首页 > 代码库 > (五)ASP.NET MVC 中关于 Action 的参数
(五)ASP.NET MVC 中关于 Action 的参数
在ASP.NET MVC 的 Controller 类下有多个 Method,如果这些 Method 都是 public 修饰的和返回值类型是 ActionResult 类型的,这些方法就时 Action。通过 “Controller 名字/方法名” 访问的时候就会执行对应的方法。
Action 有三种类型的参数:普通参数,Model 类, FormCollection。
普通参数:构架会自动把用户请求的值根据参数名字映射到对应的值。
Model 类:这种类叫 ViewModel
FormCollection:采用 fc["name"] 这种方式访问,适用于表单元素不确定的情况
例如:在 cshtml 中有一个表单
<form action="Show" method="post"> <input type="text" name="Name" value=http://www.mamicode.com/"" /> <input type="text" name="Age" value=http://www.mamicode.com/"" /> <input type="submit" value=http://www.mamicode.com/"submit" /> </form>
有一个类 Person:
public class Person { public string Name { get; set; } public int Age { get; set; } }
在Controller 中 Action 的参数:
//参数名要跟表单中对应参数的 name 属性一样,但大小写没关系 public ActionResult Show(string name, int age) { return Content(name + age) ; }
public ActionResult Show(Person p) { return Content(p.Name + p.Age) ; }
//fc 的索引名跟表单中对应参数的 name 属性一样,但大小写没关系 public ActionResult Show(FormCollection fc) { string name = fc["Name"]; string age = fc["Age"]; return Content(name+age) ; }
Action 的方法不能重载,所以如果一个 Controller 中不能同时存在两个相同的 Action
public ActionResult T1() { return View(); } public ActionResult T1(Person p) { return View(); } //以上两个 Action 不能同时存在
但是如果给 Action方法标注上 [HttpGet], 和 [HttpPost] 的 Attribute,可以同时存在,这样当页面发出 Get 请求时执行标注 [HttpGet] 的方法,当发出 Post 请求的时候执行标注 [HttpPost] 的 Action。通常标注[HttpGet] 的 Action 用来展示初始页面,标注 [HttpPost] 的 Action 用来处理表单提交。
[HttpGet] public ActionResult T1() { return View(); } [HttpPost] public ActionResult T1(Person p) { //TODO:... return View(); }
Action 的参数可以是一部分普通参数,一部分 Model:
public ActionResult T2(string adress, Person p) { //TODO:... return View(); }
Action 参数如果在请求中没有对应的值,则 Model 类的形式会取默认值。如果是普通参数的形式会报错,同时这个参数如果是值类型,而且允许为空,则要使用可空类型,或者使用 C# 的可以参数语法设定默认值。
//public ActionResult T1(string name, int? age) //{} // //或者 // //public ActionResult T1(string name, int age = 0) //{}
对于在 ASP.NET MVC 中上传文件,参数使用 HttpPostedFileBase 类型,同时在 form 表单中有 enctype="multipart/form-data 这个属性。
(五)ASP.NET MVC 中关于 Action 的参数