[英]Ajax call not hitting controller action
我正在尝试将FormCollection
发送到我的控制器中的一个动作,但该动作从未被击中。
形式:
<form class="form-horizontal" role="form" id="TestForm" onsubmit="return false">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<input type="text" name="Blah1" />
<input type="text" name="Blah2" />
</div>
<input id="SubmitButton" type="submit" value="Submit" />
</div>
</div>
jQuery/Ajax:
$(document).ready(function () {
$("#SubmitButton").click(function () {
var form = $("#TestForm").serialize();
$.ajax({
url: "/Calculator/Post",
type: "POST",
data: form,
dataType: 'json',
success: function () {
alert("Success");
},
error: function () {
alert("Error");
}
});
});
});
控制器动作:
[HttpPost]
public JsonResult Post(FormCollection form)
{
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
唯一发生的事情是浏览器警告错误消息。 我是否错过了导致动作永远不会被击中的东西?
您的代码应该可以正常工作,如问题中所述。 唯一的问题是您如何手动构建 url,这有时可能会导致 404 问题,具体取决于您当前的 url/页面。 您应该使用Url.Action
帮助器方法来构建 url,无论您当前在哪个页面,它都会负责构建正确的相对 url。
serialize()
方法足以发送表单数据。 它应该可以正常工作(继续尝试)。 您不需要按照接受的答案的建议调用serializeArray
然后将其字符串化!
$.ajax({
url: "@Url.Action("Post","Calculator")",
type: "POST",
data: $("#TestForm").serialize(),
dataType: 'json',
success: function () {
alert("Success");
},
error: function () {
alert("Error");
}
});
如果您在外部 js 文件中进行此 ajax 调用,您可以考虑将基本 url 传递给 js 文件,并使用它来构建相对 url 到您的操作方法,如本答案所述。
此外,在您的操作方法中,您不需要将JsonRequestBehavior.AllowGet
参数传递给Json
方法,因为您的 Action 方法标有[HttpPost]
[HttpPost]
public JsonResult Post(FormCollection form)
{
var item =form["Blah1"];
return Json(new { success = true });
}
.serialize()
方法创建一个采用标准 URL 编码表示法的文本字符串。 serializeArray () 方法创建一个 JavaScript 对象数组,准备编码为 JSON 字符串。
var form = JSON.stringify($("#TestForm").serializeArray());
确保您的控制器 Action Method 或 Method 的参数数据类型与正在发布的变量的数据类型相同。
例子:
这将不起作用,因为在控制器中,InsertScore 方法接收字符作为应答数据类型,但我们发送的不是字符的“abc”,因为字符长度为 2 个字节,因此在这种情况下只能发送“a”或“ab”。
阿贾克斯邮报:
$.ajax({
type: 'POST',
url: '/Home/InsertScore',
data: { Email: Em, Row: i, Answer: 'age' }
});
控制器:
[HttpPost]
[WebMethod]
public void InsertScore(string Email ,string Row,char Answer)
{
//do something here
}
正确的方法是。
阿贾克斯邮报:
$.ajax({
type: 'POST',
url: '/Home/InsertScore',
data: { Email: Em, Row: i, Answer: 'a' }
});
控制器:
[HttpPost]
[WebMethod]
public void InsertScore(string Email ,string Row,char Answer)
{
//do something here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.