【问题标题】:ASP.NET with JQuery AJAX causing "Bad Request" error带有 JQuery AJAX 的 ASP.NET 导致“错误请求”错误
【发布时间】:2014-03-20 03:40:43
【问题描述】:

当我尝试使用以下 JQuery/AJAX 将 HTTP 发布到“主”控制器时,我收到“错误请求”错误。有人看到原因吗?

这几乎是从此处获得的示例的副本,除了大大简化:JQUERY ajax passing value from MVC View to Controller。似乎没有找到控制器,这让我很困惑——我已经摆弄了很多,但没有成功。

视图中的按钮引发“错误请求”错误,并且未到达控制器:

<td> <input type="submit" class="btn-default" name="submit" value="Start Simulating-Jquery" id="btnSaveComments" />
            <script>     $('#btnSaveComments').click(function () {
                    $.ajax({
                        url: '<%:Url.Action("SaveComments")%>',
                        type: "post",
                        cache: false,
                        success: function (savingStatus) {
                            alert("save")
                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            alert(xhr.toString())
                            alert(ajaxOptions.toString())
                            alert(thrownError.toString())
                        }
                    });
                });
            </script>
        </td>

视图中起作用的按钮示例:

                     @Ajax.ActionLink("ActonLinkTest", "SaveComments", "Home",
                                new AjaxOptions
                                {
                                    HttpMethod = "POST"
                                }
                            )

控制器(家庭):

    [HttpPost]
    public ActionResult SaveComments()
    {
        return new EmptyResult();
    }

编辑:这也失败了。

查看:

<td>
            <input type="submit" class="btn-default" name="submit" value="Start Simulating-Jquery #2" id="btnSaveComments2" />
            <script>
                $('#btnSaveComments2').click(function () {
                    var comments = 'a';
                    var selectedId = '1';

                    $.ajax({
                        url: '<%: Url.Action("SaveComments")%>',
                        data: { 'id': selectedId, 'comments': comments },
                        type: "post",
                        cache: false,
                        success: function (savingStatus) {

                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            alert('failed')//$('#lblCommentsNotification').text("Error encountered while saving the comments.");
                        }
                    });
                });
            </script>
        </td>

在控制器中用这个替换之前的 savecmets 函数:

 [HttpPost]
    public ActionResult SaveComments(int id, string comments)
    {
        return new EmptyResult();
    }

【问题讨论】:

  • 您似乎缺少 ajax 调用的数据部分。
  • cache: false 为您的请求添加了一个额外的 url 参数(并且不需要用于发布请求),这会导致您的问题吗?我对 asp.net 不太熟悉,但您遇到的错误可能是由 url 或您正在发送(或未发送)的帖子变量引起的。
  • 我是 Jquery ajax 的新手,所以这可能很愚蠢,但我撕掉了调用的数据段,作为最后一次尝试让它工作的一部分。我将编辑并放回另一个不起作用的示例中。
  • @KevinB,感谢您的建议 - 我尝试从示例中删除 cache:false,尽管这也没有解决问题。
  • 一个问题是SaveComments的签名显示了一个Id(int)和一个message(string)作为参数;但是,您的测试发送了 2 个字符串,由于数据类型不匹配,框架无法正确映射。

标签: jquery asp.net ajax


【解决方案1】:

这样试试

var id = 1;
var comments = 'abc';
    $.ajax({
        data: { 'id': id, 'comments': comments },
        url: '/Home/SaveComments1',
        cache: false,
        success: function (savingStatus) {
            alert("save")
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.toString())
            alert(ajaxOptions.toString())
            alert(thrownError.toString())
        }
    });
});

【讨论】:

  • 是的,但是您正在执行 GET 而不是 POST。
  • 好主意!在发布问题之前我已经尝试过了,但我再次尝试了。它不起作用 - 尽管这确实是控制器的正确 URL。你的javascript包括什么?也许我缺少一些明显的东西? -- jquery-1.10.2.js, jquery-1.10.2.intellisense.js, jquery.unobtrusive-ajax.js
  • 不超过
  • 请看答案
  • 是的,这是与 ajax 通信的安全方式,所以我已经更新了我的答案。
【解决方案2】:

请尝试:

url: '<%= Url.Action("SaveComments") %>',

我认为你的内联标签有误。

【讨论】:

  • 尝试了这个改变,不幸的是它仍然失败。
  • 添加alert('&lt;%= Url.Action("SaveComments") %&gt;'); 以查看您要调用的网址,是否也是同样的错误?并请在您的 javascript 语句末尾添加分号 :)
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多