2013-10-10 33 views
3

我有一個像下面如何發送JSON字符串中mvc4到控制器和反序列化JSON

Extension = { 
"BookMarks": 
[{"Name":"User1","Number":"101"}, 
{"Name":"User2","Number":"102"}, 
{"Name":"User3","Number":"103"}]} 

我想這個JSON字符串發送到我的控制器的操作方法JSON對象和反序列化數據

我希望將數據傳遞到partialview

public ActionResult ExtensionsDialog(var data) 
     { 
      return PartialView(data); 
     } 

任何幫助 在此先感謝..

+0

你是如何將數據傳遞到行動?通過ajax調用? – ckv

+0

我想調用通過ajax調用,但我很困惑如何使用ajax調用 –

+0

我想放置json數據到視圖中並通過ajax調用在對話框中打開它 –

回答

6

在你查看

function SendData(){ 
     var dataToSend = JSON.stringify(data); 

     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("YourAction", "YourController")', 
      dataType: "json", 
      data: dataToSend, 
      contentType: "application/json; charset=utf-8", 

     }); 
} 

$("#Updatebtn").click(function() { 

      sendData(); 
}); 

在你型號

public class YourModel 
{ 
    public String Name { get; set; } 
    public int Number { get; set; } 
} 

在你控制器

[HttpPost] 
public ActionResult YourAction() 
     { 
      var resolveRequest = HttpContext.Request; 
      List<YourModel> model = new List<YourModel>(); 
      resolveRequest.InputStream.Seek(0, SeekOrigin.Begin); 
      string jsonString = new StreamReader(resolveRequest.InputStream).ReadToEnd(); 
      if (jsonString != null) 
      { 
       JavaScriptSerializer serializer = new JavaScriptSerializer(); 
       model = (List<YourModel>)serializer.Deserialize(jsonString, typeof(List<YourModel>); 
      } 
      //Your operations.. 
     } 

希望這會有所幫助。

+0

其中是操作方法來保存數據的參數 –

+0

數據出現在您的Request對象中,更多的是,您發送的JSON是List,所以我想您需要使用'List extension'作爲參數,如果你需要參數 – AthibaN

+1

Oops更新了答案,添加一個轉換 'model =(List )serializer.Deserialize(jsonString,typeof(List )' – AthibaN

0

您可以通過類似這樣的Ajax調用傳遞您的數據:

$.ajax({ 
    url   : "@Url.Action("YourMethod", "YourController")", 
    contentType : "application/json; charset=utf-8", 
    dataType : "json", 
    type  : "POST", 
    data  : JSON.stringify({Extension: data}) 
}).done(function (result) { 
    //Check if it's OK 
}).fail(function (result) { 
    //Check if it is not OK 
}).always(function() { 
    //Some code executed whatever success or fail 
}) 

.done.fail.always是不是強制性的,它只是在我看來更好。

然後像你一樣在控制器中使用它。 應該可以。

+0

謝謝@ AlexB ..如何反序列化json數據在控制器操作方法中 –

+0

您可以訪問您的操作方法中的'Extension'變量的所有字段,如'Extension.Bookmarks'。去嘗試一下。 – AlexB

+0

不要忘記驗證答案,如果它有幫助,或者讓我們知道你是否有其他問題@ user2815454 – AlexB

0

您可以調用該操作並傳遞這樣的值。只需將您的數據替換爲數據部分中的數據即可。

$.ajax({ 
       url: '/Schedule/Schedule/Create', 
       type: 'POST', 
       cache: false, 
       datatype: JSON, 
       data: { 

       scheduleName: ScheduleName, 
       description: Desc, 
       Hol_Type: JSON.stringify(holidaytype), 
       Start_Date: start_date, 
       End_Date: end_date, 
       Start_Time: StartTime, 
       End_Time: EndTime, 
       days: JSON.stringify(days), 
       rec_type:1 

      }, 
      success: function (data, status) {}}); 
+0

感謝您的回覆......我們應該在控制器的Action方法中擁有多少參數@ckv –

+0

您可以在答案中使用單獨的參數或遵循ravisolanki07方法。 – ckv

0

您的腳本應該是這樣的:

Extension = {"BookMarks":[{"Name":"User1","Number":"101"},{"Name":"User2","Number":"102"},{"Name":"User3","Number":"103"}]} 
    $.ajax({ 
    url   : "@Url.Action("ExtensionsDialog", "Controller")", 
    contentType : "application/json; charset=utf-8", 
    dataType : "json", 
    type  : "POST", 
    data  :  {"data" : Extension } 
}); 

操作方法是一樣的。

public ActionResult ExtensionsDialog(var data) 
    { 
     return PartialView(data); 
    } 
2

我不認爲你必須自己閱讀輸入流。如果你提供一個模型,活頁夾應該爲你做。

在後面的代碼:

public class StatusInfo 
    { 
     public int ItemId { get; set; } 
     public int StatusId { get; set; } 
    } 

    [HttpPost] 
    public ActionResult EditStatus(StatusInfo info) 
    { 
     DoSomethingInteresting(info.ItemId, info.StatusId); 
     return new EmptyResult();   
    } 

,只是使用jQuery的AJAX功能,像這樣:

function changeStatus(itemId, statusId) { 
    var postData = { "ItemId": itemId, "StatusId": statusId }; 
    $.ajax({ 
     url: "/Item/EditStatus", 
     type: "POST", 
     data: JSON.stringify(postData), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data, status) { 
      console.log("success updating status."); 
     }, 
     error: function() { 
      console.log("error updating status."); 
     } 
    }); 
}