2011-10-16 48 views
1

我遇到問題將我的列表對象傳遞給我的控制器 - 使用ajax post序列化List <SelectListItem>從視圖到MVC中的控制器3

視圖

我有這樣的:

 try { 
     var id = schedule.value; 
     var data2 = @Html.Raw(Json.Encode(Model.SavedScheduleList)); 
     var url = '@Url.Action("SetActiveSchedule", "Frame")'; 
     $.post(url, { savedScheduleList: data2, signScheduleDataId: id }, function (data) { 
     }); 
    } 
    catch (err) 
    { 
     alert(err); 
    } 

我的控制器看起來是這樣的:

[HttpPost] 
    public ActionResult SetActiveSchedule(List<SelectListItem> savedScheduleList, int signScheduleDataId) 
    { 
     try 
     {    
      return Json(null); 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 

所以在執行我的行動的時候,我savedScheduleList包含列表對象有7個對象(這是但是每個項目似乎都是「空白」的,即SelectListItem類的這些是每個項目的屬性值:S elected = false, Text = null, Value = null.

Model類(已被強類型的這一觀點)是:

public class ScheduleModel 
{ 

    private SignSchedule activeSignSchedule = new SignSchedule(); 
    private List<SelectListItem> savedSignScheduleList = new List<SelectListItem>(); 

    public int SignDataId { get; set; } 
    public ScheduleFrameList ListFrames { get; set; } 
    public DateTime Start { get; set; } 
    public LogMessage LogMessage { get; set; } 
    public bool CommsLogVisible { get; set; } 
    public SignSchedule SignScheduleToMakeActive { get; set; } 
    public int ActiveSignScheduleId { get; set; } 
    //public List<SignSchedule> SavedSignScheduleList { get { return savedSignScheduleList; } } 
    public List<SelectListItem> SavedScheduleList { get { return savedSignScheduleList; } } 
} 

職前檢查數據2,顯示了JSON格式正確的數據和檢查行動中,請求屬性,我可以看到正確的Form.AllKeys屬性中的值以及Params屬性,但它似乎無法將其正確解析回Controller Controller的參數對象。

我想要做什麼?

感謝

編輯 這裏的數據2變量的字符串表示:

var data2 = [{"Selected":false,"Text":"9","Value":"2589"},false,"Text":"afsdfs","Value":"2585"},false,"Text":"sdfas","Value":"2588"}....] 

我只是在這裏展示3項,但其實也有7預期。

回答

2

發送複雜的對象,並列出了最簡單的方法是使用JSON請求,就像這樣:

var id = schedule.value; 
var data2 = @Html.Raw(Json.Encode(Model.SavedScheduleList)); 
$.ajax({ 
    url: url, 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ savedScheduleList: data2, signScheduleDataId: id }), 
    traditional: true, 
    success: function(result) { 
     // TODO: do something with the results 
    } 
}); 

注意,JSON.stringify功能本機內置到現代的瀏覽器。但是,如果您需要支持傳統瀏覽器,則可以將json2.js腳本包含到您的頁面中。

+0

謝謝你的工作。我將在未來使用它。 – Jason

相關問題