【发布时间】: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 个字符串,由于数据类型不匹配,框架无法正确映射。