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

そうすれば、コードは機能するはずです。

于 2012-06-26T21:40:47.270 に答える