将JSON对象传递给Controller但是松散的模型绑定

时间:2012-06-26 21:33:16

标签: ajax json asp.net-mvc-3

我正在尝试使用MVC3和JSON将简单的JSON对象传递给控制器​​。该对象被传递但我松散了所有属性。我在请求中看到了firebug中的所有属性,但我不确定为什么我在服务器上丢失它们。是否需要设置对象的所有属性才能使映射起作用?我正在使用MVC3,因此应该构建绑定。我缺少什么?

类别:

[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);
    }

1 个答案:

答案 0 :(得分:0)

您的代码中名称不匹配 - 参数在Javascript代码中命名为“StoryNote”,在Controller中命名为“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',                }
    };

那么你的代码应该可以工作。