0

我正在遵循我在当前项目中多次使用的模式,但对于我编写的最新视图,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 的每个重载都在操作之后使用 Id 解析了路由,因此每次表单都发布到 GET 方法。

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

我已经在其他几十种表格中遵循了这种模式——有人知道我这次可能做错了什么吗?

4

2 回答 2

0

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

于 2012-09-11T21:40:57.633 回答
0

只是在这里跳出框框思考,但是如果您使用以下内容会发生什么。您的任何操作都没有明确采用零参数,所以我想知道路由引擎是否很难选择“正确”路径:

@using(Html.BeginForm("Bar",          
                      "Foo",          
                      new {model = null},
                      FormMethod.Post,
                      new {id="formName"}))
于 2012-09-11T21:52:50.853 回答