2

我有一个提交时没有到达控制器方法的表单(我在那里放了一个断点)

    [HttpPost]
    public ActionResult SaveBilling( FormCollection fc )
    {
...
}

前端代码是这样的

<form action="/PersonSettings/SaveBilling" method="post" >
...
<input type='submit' value="save" />
</form>

有任何想法吗 ?

不确定这是否是路由处理程序问题,因为如果我在浏览器中转到 /PersonSettings/SaveBilling,它确实会到达 GET 版本,但 post 方法只会产生一个空白页面并且不会进入代码

4

5 回答 5

5

将您的视图重写为:

@using (Html.BeginForm("SaveBilling", "PersonSettings", FormMethod.Post))
{
    ....
    <input type='submit' value="save" />
}

该控制器是否在任何区域?

于 2012-10-23T09:19:34.797 回答
1

我意识到这已经解决了,但我想我会解决另一个可能的原因:在[ValidateAntiForgeryToken]你的方法中使用属性而不@Html.AntiForgeryToken()在你的代码中会产生同样的问题。

于 2014-05-05T20:23:21.810 回答
0

原来这是一个与路由相关的问题,我有一些复杂的路由,默认的 mvc 路由正在捕获应该通过默认 mvc 路由的区域。

能够通过为我的函数使用显式参数而不是表单集合来重新创建问题,所以这可能是问题所在。

于 2012-10-23T10:10:08.050 回答
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>

现在你可以达到你的控制器动作。

于 2014-02-13T05:05:31.427 回答
0

有时使用像Fiddler这样的网络嗅探工具有助于查看发送请求时出现的问题并且似乎没有到达服务器。

于 2018-12-10T23:58:08.727 回答