2012-06-26 46 views
1

我想通過一個簡單的JSON對象到使用MVC3和JSON的控制器。該對象通過,但我失去了所有的屬性。我在請求中看到了螢火蟲中的所有屬性,但不知道爲什麼我在服務器上丟失它們。是否需要設置對象的所有屬性才能使映射工作?我正在使用MVC3,因此綁定應該內置。我錯過了什麼?傳遞JSON對象到控制器,但鬆散的模型綁定

類:

[Serializable] 
public class StoryNote 
{ 
    public int Id { get; set; } 
    public string Note { get; set; } 
    public Nullable<int> StoryCardId { get; set; } 
    public string CreatedBy { get; set; } 
    public Nullable<System.DateTime> CreateDate { get; set; } 
    public virtual StoryCard StoryCard { get; set; } 
} 

JSON:

$(document).ready(function() { 

    $('#newNote').click(function (e) { 
     e.preventDefault(); 
     var storynote = { 
      StoryNote: {     
       Note: $('#Note').val(), 
       StoryCardId: $('#StoryCard_Id').val(), 
       CreatedBy: 'Xyz',    } 
     }; 


     $.ajax({ 
      url: '@Url.Action("PostNote")', 
      type: 'POST', 
      data: JSON.stringify(storynote), 
      dataType: 'json',     
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       $('#previousNotes').append(data.Note + '<br/>' + data.CreatedBy + '<br/><hr/>'); 
      }, 
     }); 
    }); 
}); 

控制器:

[HttpPost] 
    public JsonResult PostNote(StoryNote newStoryNote) 
    { 

     StoryNote newNote = new StoryNote { Note = newStoryNote.Note, CreatedBy = newStoryNote.CreatedBy, StoryCardId = newStoryNote.StoryCardId, CreateDate = DateTime.Now }; 
     db.StoryNotes.Add(newStoryNote); 

     return Json(newStoryNote, JsonRequestBehavior.AllowGet); 
    } 

回答

0

您在代碼中有一個名不匹配 - 在Javascript代碼的參數被命名爲 「StoryNote」 和控制器中的「newStoryNote」。這些名字應該是平等的。我相信,如果你改變

var storynote = { 
     StoryNote: {     
      Note: $('#Note').val(), 
      StoryCardId: $('#StoryCard_Id').val(), 
      CreatedBy: 'Xyz',    } 
    }; 

var storynote = { 
     newStoryNote: {     
      Note: $('#Note').val(), 
      StoryCardId: $('#StoryCard_Id').val(), 
      CreatedBy: 'Xyz',    } 
    }; 

那麼你的代碼應該工作。

+0

非常感謝謝爾蓋!這就是問題所在,總是那些容易導致頭痛的事情。 – TampaRich

相關問題