2016-01-27 72 views
0

我想使用AJAX調用將JSON字符串發送到控制器。除了JSON字符串中的嵌套對象沒有映射到控制器端的嵌套對象之外,一切似乎都正常工作。這是我的代碼的一個例子。嵌套的JSON對象沒有映射到服務器端對象

Class MyClass1{ 
    string prop1; 
    string prop2; 
    string prop3; 
    MyClass2 prop4; 
} 

Class MyClass2{ 
    string prop5; 
    string prop6; 
    string prop7; 
} 

以下是我試圖繪製的圖。

$("#btnSave").click(function() { 
      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("Member", "Application")', 
       data: { applicantModel:getAppData(), buttonText: $("#btnSave").val(), isDeleted: $("#hdnDeleted").val() }, 
       dataType: "json", 
       success: function (data) { 

       }, 
       error: function (xhr, ajaxOptions, error) { 

       } 
      }); 
     }) 

getAppData = function() { 
     var fields = { 
    "prop1": "a", 
    "prop2": "b", 
    "prop3": "c", 
    "prop4":{ 
     "prop5": "d", 
     "prop6": "e", 
     "prop7": "f" 
     } 
    } 

    return fields; 
} 

和我的控制器方法...

<HttpPost()> 
    Function Member(applicantModel As ApplicantModels, buttonText as String, isDeleted as String) As ActionResult 
     //do some stuff with the data 
     Return View(applicantModel) 
    End Function 

當我在控制器內部突破,我對MyClass1的對象正確映射,但prop4數據不被映射。我已經嘗試了來自其他線程的幾個想法,我已經嘗試過JSON.Stringify()JSON在發送Ajax調用之前。我完全沒有想法。會喜歡一些幫助!

在此先感謝!

+0

你可以發佈你如何實例化你的有效載荷並通過電線發送它。 –

+0

用更多代碼更新 –

+0

我不認爲你需要在getAppData函數中引用屬性名稱,值是yes,但不是prop。 –

回答

2

您需要使您的視圖模型屬性public使用setget訪問器,以便DefaultModel聯編程序可以從發佈的表單數據設置這些屬性的值。

public class MyClass1 
{ 
    public string prop1 { get; set; } 
    public string prop2 { get; set; } 
    public string prop3 { get; set; } 
    public MyClass2 prop4 { get; set; } 
} 

public class MyClass2 
{ 
    public string prop5 { get; set; } 
    public string prop6 { get; set; } 
    public string prop7{ get; set; } 
} 

隨着這一變化,您的代碼應該很好地工作。

+0

我曾嘗試過,添加了contentType =「application/json」,但仍未正確映射字段。我沒有將它設置爲var m,但我做了數據:JSON.stringify({applicantModel:getAppData(),buttonText:$(「#btnSave」)。val(),isDeleted:$(「#hdnDeleted」) .val()})。這是錯的嗎? –

+0

你的動作方法是怎樣的? – Shyju

+0

我已經將該方法的基礎知識添加到了我的代碼中。如果我在該方法的第一行中斷,applicatorModel將填充除內部對象之外的所有數據(prop4在我的僞代碼中) –