将表单视图提交给控制器

时间:2012-12-21 17:27:24

标签: asp.net-mvc-3 forms view controller http-post

我的表单视图中有一个表单定义为

using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

此表单包含许多类型按钮和按钮的输入

<input type="submit" value="val1" name="action">
<input type="submit" value="val2" name="action">
<input type="submit" value="val3" name="action" />
<button class="button" type="submit" name="action" value="val4">Val4</button>

我有2个控制器用于此视图

Public ActionResult form{
} 

[HttpPost]
public ActionResult form(String button)
{
  switch (actionType)
  {
    case "val1":
      return RedirectToAction("AnotherView"); 
    case "val2":
      return RedirectToAction("AnotherView2");
    default:
      return RedirectToAction("AnotherView3");
  }
} 

但无论我点击哪个按钮,我都会被重定向到以

形式定义的主页
using (Html.BeginForm("Index", "Home",

我的问题是如何解决这个问题?我怎么能确定这个post方法是否绑定到我的视图中,因为我只是输入了它?

2 个答案:

答案 0 :(得分:0)

using (Html.BeginForm("action_name", "controllername", FormMethod.GET, new { enctype = "multipart/form-data" }))

使用输入类型选择:

<select name="action">
<option value="val1" >val1</option>
<option value="val2" >val2</option>
<option value="val3" >val3</option></select>

和控制器上的方法

public ActionResult action_name(String action){
   switch (action)
  {
        case "val1":
          return RedirectToAction("AnotherView"); 
        case "val2":
          return RedirectToAction("AnotherView2");
        default:
          return RedirectToAction("AnotherView3");
  }
}

答案 1 :(得分:0)

如果指定名为action的表单字段,MVC会将此解释为要路由到的控制器上的操作。因此,单击val1将最终执行方法:

public ActionResult val1()
{
}

如果此方法不存在,您的错误处理将接管。

解决方案:请勿使用action作为表单字段的名称。