我正在遵循我在当前项目中多次使用的模式,但对于我编写的最新视图,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 的调用——在这种情况下,路由正确解析,并且表单已发布到适当的操作。
我已经在其他几十种表格中遵循了这种模式——有人知道我这次可能做错了什么吗?