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 を使用している間は正しい値を保持しています。

UPDATE : $.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ような単純なテキスト値であり、リクエストに関する詳細情報を取得するために使用できるjQueryオブジェクトですが、それが必要になることはほとんどありません。successerrorjqxhrXMLHttpRequest

于 2013-08-28T09:53:30.497 に答える
0

まず第一に、ビューの JavaScript セクションの詳細を提供していないことを @Tieson.T に謝罪したいと思います。この問題は、実際には 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 ではなくなりました。modal-hide イベントが IE9 でこのように動作する理由がわかりません。

私の問題を解決するためのすべての努力に感謝します:-)

于 2013-08-29T07:48:31.280 に答える