2

我在将 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**)NULL,但在使用 FireFox 时它保持正确的值。

更新:尝试使用 $.post 的新方法

function CreateNewCustomer(newCustomer) {
    $.post("/CustomerHeader/CreateCustomerHeader",
      newCustomer,
      function (response, status, jqxhr) {
          console.log(response.toString())
      });
}
4

2 回答 2

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是一个简单的文本值,例如successor error,并且jqxhr是一个 jQueryXMLHttpRequest对象,您可以使用它来获取有关请求的更多信息,但我很少发现需要它。

于 2013-08-28T09:53:30.497 回答
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'),现在控制器收到的值不再是 NULL 与 IE。不知道为什么 modal-hide 事件在 IE9 中的行为如此。

感谢为解决我的问题所做的所有努力:-)

于 2013-08-29T07:48:31.280 回答