0

JQuery から MVC 4 コントローラーにデータを渡そうとしています。コントローラーが呼び出されますが、データは渡されません。以前は常にフォームのシリアル化を使用していましたが、ここでは適切ではありません。

私のコントローラー:

[HttpPost]
public ActionResult Write(VideoSessionEnvelope envelope)
{
    if (ModelState.IsValid)
    {
        envelope = Log.Write(envelope);
    }
    var result = Json(envelope);
    return result;
}

すべてのビュー モデルのコンテナーとしてエンベロープ クラスを使用します。

public class VideoSessionEnvelope : BaseEnvelope
{
    public VideoSessionEnvelope()
    {
        SessionStart = new VideoSessionStartViewModel();
    }
    public Guid? LogEntryID { get; set; }
    public VideoSessionStartViewModel SessionStart { get; set; }
    }
}

ビューモデル

public class VideoSessionStartViewModel: IViewModel
{
    public string SessionId { get; set; }
    public int UserId { get; set; }
    public string Message { get; set; }
}

そして最後にJavaScript

var Logging = Logging || {};
Logging.VideoSession = function () {
    var Start = function (sessionId, userId, message) {
    var envelope = {
            SessionStart: {
                "SessionId": sessionId,
                "UserId": userId,
                "Message": message
            }
        }
        var data = JSON.stringify(envelope);
        $.ajax({
            type: "POST",
            url: "/Logging/Write",
            data: data,
            datatype: "application/json",
            success: function (result) {
                return result;
            },
            error: function (request, status, error) {
                return error;
            }
        });
    };

    return {
        Start: Start
    };
}();

Firebugによると、データは次のように渡されます

JSON
SessionStart  Object { SessionId="sessionIdVal", UserId=123, Message="messageValue"}
Message      "messageValue"
SessionId    "sessionIdVal"
UserId       123

コントローラーが呼び出されますが、ビュー モデルのプロパティは常に null です。テーマでいくつかのバリエーションを試しましたが、何もうまくいかないようです。

4

1 に答える 1

0

Model Binder によって取得されるように、envelope という名前のリテラルでデータをラップしてみてください。

data: { envelope: data },

アップデート

への呼び出しを削除しJSON.stringify()ます。オブジェクト リテラルをシリアル化する必要は厳密にはありません。

于 2013-09-15T17:06:03.667 に答える