将JSON数据发布到MVC 4控制器时遇到了一些问题 下面的方法在Firefox中正常工作但很遗憾在IE 9中失败
JavaScript:
var newCustomer = {
CustName: $("#CustName").val(),
CustLocalName: $("#CustLocalName").val(),
CustNumber: $("#CustNumber").val(),
CountryID: $("#SelectCountry").val(),
City: $("#City").val()
};
$.ajax({
url: '@Url.Content("~/CustomerHeader/CreateCustomerHeader")',
cache: false,
type: "POST",
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(newCustomer),
success: function (mydata) {
$("#message").html("Success");
},
error: function () {
$("#message").html("Save failed");
}
});
这是我的控制者:
public JsonResult CreateCustomerHeader(CustomerHeader record)
{
try
{
if (!ModelState.IsValid)
{
return Json(new { Result = "ERROR", Message = "Form is not valid! Please correct it and try again." });
}
RepositoryHeader.Update(record);
return Json(new { Result = "OK", Record = record});
}
catch (Exception ex)
{
return Json(new { Result = "ERROR", Message = ex.Message });
}
}
public JsonResult CreateCustomerHeader(CustomerHeader **data**)
中的“data”变量变为NULL,但在使用FireFox时,它保持正确的值。
更新:尝试使用$ .post
的新方法function CreateNewCustomer(newCustomer) {
$.post("/CustomerHeader/CreateCustomerHeader",
newCustomer,
function (response, status, jqxhr) {
console.log(response.toString())
});
}
答案 0 :(得分:2)
根据您显示的位,这是一种简化的变体,使用jQuery.post()
(http://api.jquery.com/jQuery.post/)可以更加一致地工作:
var data = {
CustName: $("#CustName").val(),
CustLocalName: $("#CustLocalName").val(),
CustNumber: $("#CustNumber").val(),
CountryID: $("#SelectCountry").val(),
City: $("#City").val()
};
$.post({
'@Url.Action("CreateCustomerHeader", "CustomerHeader")',
data,
function(response, status, jqxhr){
// do something with the response data
}).success(function () {
$("#message").html("Success");
}).error(function () {
$("#message").html("Save failed");
});
$.post()
使用$.ajax
作为基础,但摘要了一些细节。例如,$.post
调用不会被缓存,因此您不需要设置cache
状态(如果这样做,则设置它将被忽略)。使用简单的JavaScript对象让jQuery决定如何序列化POST变量;使用这种格式时,我很少遇到模型绑定器无法正确绑定到我的.NET类的问题。
response
是您从控制器发回的任何内容;在您的情况下,一个JSON对象。 status
是一个简单的文本值,如success
或error
,而jqxhr
是一个jQuery XMLHttpRequest
对象,您可以使用它获取有关请求的更多信息,但我很少发现需要它。
答案 1 :(得分:0)
首先,我想向@ Tieson.T道歉,因为它没有提供有关视图的JavaScript部分的详细信息。问题实际上是由ajax调用后发生的$('#addCustomerHeaderModal')。modal('hide')引起的。
完整的脚本:
try{ ..
var newCustomer =
{
CustName: $("#CustName").val(),
CustLocalName: $("#CustLocalName").val(),
CustNumber: $("#CustNumber").val(),
CountryID: $("#SelectCountry").val(),
City: $("#City").val()
};
$.ajax({
url: '/CustomerHeader/CreateCustomerHeader',
cache: false,
type: "POST",
dataType: "json",
data: JSON.stringify(newCustomer),
contentType: "application/json; charset=utf-8",
success: function (mydata) {
$("#message").html("Success");
},
error: function () {
$("#message").html("Save failed");
}
});
}
catch(Error) {
console.log(Error.toString());
}
//$('#addCustomerHeaderModal').modal('hide')//THIS is the part that causing controller cannot retrieve the data but happened only with IE!
我评论了 $('#addCustomerHeaderModal')。modal('hide'),现在控制器收到的值不再是IE的NULL。不知道为什么模态隐藏事件在IE9中表现得像这样。
感谢所有努力解决我的问题: - )