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

控制器被调用,但视图模型中的属性始终为空。我在主题上尝试了几种变体,似乎没有任何效果。

4

1 回答 1

0

尝试将数据包装在名称为信封的文字中,以便模型绑定器将其拾取:

data: { envelope: data },

更新

移除对 的调用JSON.stringify(),序列化对象字面量并不是绝对必要的。

于 2013-09-15T17:06:03.667 回答