Jquery发布到mvc 4控制器没有传递数据

时间:2013-09-15 17:02:14

标签: asp.net-mvc jquery asp.net-mvc-4

我正在尝试将数据从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。我在主题上尝试了几种变体,似乎没什么用。

1 个答案:

答案 0 :(得分:0)

尝试将您的数据包装在一个名称为信封的文字中,以便它可以被Model Binder拾取:

data: { envelope: data },

<强>更新

删除对JSON.stringify()的调用,不一定要序列化对象文字。