显式调用FormExtensions.BeginForm解析HttpGet修饰的方法而不是HttpPost

时间:2012-09-11 21:19:21

标签: c# asp.net-mvc-3

我正在遵循我在当前项目中使用了很多次的模式,但是对于我编写的最新视图,BeginForm()正在解析我的操作方法的GET路由,而不是POST。我不知道我做了什么不同的事情,所以我真的很难过。示例代码如下:

public class FooController:Controller {
  [HttpGet]
  public ActionResult Bar(int id) {
    return View(new Model(id));
  }

  [HttpPost]
  public ActionResult Bar(Model model) {
    //do stuff with the model
  }
}

//Bar View
<script type="text/javascript">
  $(document).ready(function() {
    $('#formName').submit(function() {
      if(/* invalid input */) {
        //set html for an error div
        return false;
      }
    });
  });
</script>
@model Model
@using(Html.BeginForm("Bar",           //action name
                      "Foo",           //controller name
                      null,            //explicit null for route values
                      FormMethod.Post  //explicitly set form method
                      new {id="formName"})){  //explicitly id the form
  //bunch of inputs, a la
  @Html.TextBox("Property", Model.Property)
}

//Bar html
<form id="formName" action="/Foo/Bar/{Model Id}" method="post">
  <!-- input elements, etc -->
</form>

我尝试过的BeginForm的每次重载都会在动作后解析路径,因此每次表格POST到GET方法时都会这样。

我尝试将POST方法重命名为例如“BarBar”,并更新对BeginForm的调用 - 在这种情况下,路由正确解析并且表单已发布到相应的操作。

我已经按照这种模式推出了其他几十种形式 - 有人知道这次我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

对于输入你是使用Html.TextBoxFOR,Html.DropDownListFOR等而不仅仅是Html.TextBox?

答案 1 :(得分:0)

在这里开箱即用,但如果您使用以下内容会发生什么。你的任何一个动作都没有明确地采用零参数,所以我想知道路由引擎是否很难选择“正确”的路径:

@using(Html.BeginForm("Bar",          
                      "Foo",          
                      new {model = null},
                      FormMethod.Post,
                      new {id="formName"}))