我无法在控制器中看到JavaScript中的数据,但我看到了Request Header中的值。我不知道为什么这不起作用....
的JavaScript
$('#Save').click(function (e) {
if (document.forms[0].checkValidity()) {
e.preventDefault();
$.ajax({
url: "/Home/SaveDetails",
dataType: "json",
data: JSON.stringify({ data: "test" }),
type: "POST",
contentType: "application/json;charset=utf-8",
success: function (result) {
if (result > 0) {
alert("Worked!);
} else {
alert("There was an issue.");
}
},
complete: function () {
alert("Completed!");
},
error: function (jqXHR, textStatus, errorThrown) {
// Handle error.
alert(errorThrown);
}
});
}
else {
alert("Form is not valid");
}
});
控制器
[HttpPost]
public ActionResult SaveDetails(string value)
{
return Json(true, JsonRequestBehavior.AllowGet);
}
如果我修改上面ajax请求的url参数以包含类似>的内容。 url:" / Home / SaveDetails?username =" +' sampleUser'我可以在控制器中看到这些数据,但无论采用何种方法,我都不会看到使用数据参数从ajax请求发送的任何内容。
答案 0 :(得分:3)
您需要将发布的名称与方法参数相匹配。
尝试在ajax调用中进行此更改
数据:JSON.stringify({值:"测试"}),
答案 1 :(得分:3)
您要发送控制器的数据名称必须与您要匹配的参数名称相匹配。在您的情况下,您命名数据“数据”,参数称为“值”。这应该解决它:
data: JSON.stringify({ value: "test" })
另外,您不需要使用JSON.stringify来发送数据。以下行也可以正常工作:
data: { value: "test" },
此外,如果您的数据与某个类匹配,mvc将尽力匹配发送到类属性名称的数据:
public class MyClass
{
public int Quantity { get; set; }
public string Title { get; set; }
}
public ActionResult DoStuff(MyClass myClass)
{
//do stuff
}
然后在你的ajax中你可以:
data: { quantity: 32, title: 'Stuff & Things' },
并且控制器会将ajax请求中的数据与模型匹配。
答案 2 :(得分:1)
如果我没弄错的话,您正在检索请求参数(用户名)中的数据,而不是您在响应正文中发送的数据({data:'test'})。
我不确定您在服务器上使用的是哪种语言(看起来像java),但是检查有关如何从Response Body检索数据的文档/教程,看起来您的控制器当前已设置为检索来自请求参数的数据,这就是为什么你可以检索Ajax Post的in data属性中的数据。
如果你需要我进一步解释,请给我一个喊叫。