我正在遵循我在当前项目中使用了很多次的模式,但是对于我编写的最新视图,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的调用 - 在这种情况下,路由正确解析并且表单已发布到相应的操作。
我已经按照这种模式推出了其他几十种形式 - 有人知道这次我做错了什么吗?
答案 0 :(得分:0)
对于输入你是使用Html.TextBoxFOR,Html.DropDownListFOR等而不仅仅是Html.TextBox?
答案 1 :(得分:0)
在这里开箱即用,但如果您使用以下内容会发生什么。你的任何一个动作都没有明确地采用零参数,所以我想知道路由引擎是否很难选择“正确”的路径:
@using(Html.BeginForm("Bar",
"Foo",
new {model = null},
FormMethod.Post,
new {id="formName"}))