我有一个表单,提交时没有达到控制器方法(我在那里放了一个断点)
[HttpPost]
public ActionResult SaveBilling( FormCollection fc )
{
...
}
前端代码是这样的
<form action="/PersonSettings/SaveBilling" method="post" >
...
<input type='submit' value="save" />
</form>
任何想法?
不确定它是否是路由处理程序问题,因为如果我在浏览器中转到/ PersonSettings / SaveBilling但它确实到达GET版本但是post方法只产生一个空白页面并且没有进入代码
答案 0 :(得分:5)
将您的观点重写为:
@using (Html.BeginForm("SaveBilling", "PersonSettings", FormMethod.Post))
{
....
<input type='submit' value="save" />
}
这个控制器是否在任何区域?
答案 1 :(得分:1)
我意识到这已经解决了,但我认为我会解决另一个可能的原因:在代码中没有[ValidateAntiForgeryToken]
的方法上使用@Html.AntiForgeryToken()
属性会产生同样的问题。< / p>
答案 2 :(得分:0)
事实证明这是一个与路由相关的问题,我有一些复杂的路由,默认的mvc路由是捕捉应该通过带区域的默认mvc路由的东西。
能够通过为我的函数而不是formcollection设置显式参数来重新创建问题,因此这可能是问题所在。
答案 3 :(得分:0)
使用表单并定义行动路径。
<form id="subscriptionForm" action="/Category/Create" method="post">
--your div
</form >
现在使用脚本来序列化表单
<script type="text/javascript">
$('#Save').click(function () {
var form = $("#subscriptionForm");
var url = form.attr("action");
var formData = form.serialize();
$.post(url, formData, function (data) {
$("#msg").html(data);
});
})
</script>
现在您可以实现控制器操作。
答案 4 :(得分:0)
有时使用Fiddler之类的网络嗅探工具有助于查看发送请求但似乎未到达服务器时出了什么问题。