【问题标题】:Query String error when trying to save the data using jquery ajax?尝试使用 jquery ajax 保存数据时出现查询字符串错误?
【发布时间】:2015-09-22 07:24:48
【问题描述】:

ASP.NET MVC4 || C#

我有一个 MenuRole 页面,它显示数据库中的菜单列表。用户必须从页面中选择一个角色和相应的菜单。一切顺利,但是当我尝试保存数据时,我收到以下错误。 'The request filtering module is configured to deny a request where the query string is too long'.I 使用 jquery ajax 保存细节,我发现参数作为查询字符串从视图传递到控制器,我认为这不是理想的情况。

这是在表单中使用jquery ajax时传递数据的默认行为吗?

如何解决这个问题?

错误信息

请求的网址

用于保存详细信息的 JQuery ajax

 $("#btnSubmit").click(function () {
            var formData = $('#frmRoles').serialize();
            $.ajax({
                type: "POST",
                url: "@Url.Action("Add","MenuSettings")",
                data: formData,
                datatype: "json",
                success: function (data) {
                    toastr.success(data.message)                        
                },
                error: function (data) {
                    toastr.error(data.message);
                }
            });
        })

【问题讨论】:

  • 你有没有标有[HttpPost]的方法Add
  • @StephenMuecke 感谢您的输入。我用 httppost 装饰了 add 方法,但忘记用 post 方法装饰 Html 表单
  • 您不需要装饰表单 - 默认情况下是 FormMethod.Post。而且我怀疑如果发生这种情况,您还必须同时进行标准提交和 ajax 发布 - $("#btnSubmit") 是提交按钮吗? - 如果是这样,添加return false; 作为脚本的最后一行以取消默认

标签: jquery ajax asp.net-mvc-4 query-string


【解决方案1】:

查询字符串表示您进行 GET 调用(并超出查询字符串限制)。假设你的按钮是一个提交按钮,那么你同时进行普通提交(表单方法必须是FormMethod.Get)和ajax post。

要防止默认提交,请在脚本末尾添加return false;

$("#btnSubmit").click(function () {
    var formData = $('#frmRoles').serialize();
    $.ajax({
        ....
    });
    return false; // add this
})

【讨论】:

  • 就是这样...@super steve
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多