1

我正在尝试使用 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);
    }
4

1 回答 1

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',                }
    };

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

于 2012-06-26T21:40:47.270 回答