码迷,mamicode.com
首页 > Web开发 > 详细

(五)ASP.NET MVC 中关于 Action 的参数

时间:2017-04-08 10:01:27      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:result   返回   默认   div   action   person   get   存在   元素   

  在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="" />
    <input type="text" name="Age" value="" />
    <input type="submit" value="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 的参数

标签:result   返回   默认   div   action   person   get   存在   元素   

原文地址:http://www.cnblogs.com/yesunda/p/6680708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!