将复杂的JavaScript对象发送到ASP.Net MVC Action

时间:2009-12-31 20:30:55

标签: javascript jquery asp.net-mvc ajax json

这似乎是一个相当普遍的主题,很少有人给出了一些非常有建设性的答案,但我仍然在努力让我的工作尝试。

例如,问题与this one大致相同,只是我只是尝试发送单个复杂对象而不是数组。

我的控制器看起来像这样:

[AcceptVerbs (HttpVerbs.Put)]
[Authorize]
[JsonFilter(Param="Designer", JsonDataType=typeof(Designer))]
public JsonResult SaveProfile(Designer Profile)
{
    ProfileRepository Repo = new ProfileRepository();

    Designer d = Repo.GetById(Profile.ID);
    d.Comments = Profile.Comments;
    d.DisplayName = Profile.DisplayName;
    d.Email = Profile.Email;
    d.FirstName = Profile.FirstName;
    d.LastName = Profile.LastName;


    Repo.Update(d);

    return Json(Profile);
}

检索页面数据并发布它的代码如下所示:

    $('#save-profile').click(function () {

        var Profile = {};
        var context = $('#profile-data')[0];

        $('span', context).each(function () {
            Profile[this.id] = $(this).text();
        });

        Profile.ID = $('h3', context).attr('id');
        console.log(Profile);

        //var DTO = { 'Profile': Profile };

        $.ajax({
            type: "PUT",
            url: "/Home/SaveProfile",
            data: { 'Profile': Profile },
            success: function (data) {
                console.log(data);
            }
        });
    });

正确创建对象并将其发布到服务器(顺便说一下,我尝试使用POST和PUT),服务器似乎正在接收一个对象实例,但属性 - 像往常一样 - 都是null。

我错过了什么?我尝试使用上面链接的示例问题中的方法(改编),但似乎仍然没有更接近解决方案。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

事实证明,ActionResult方法本身没有任何问题,JavaScript对象或Ajax帖子也没有任何问题。问题实际上在于装饰ActionResult的自定义过滤器以及为其param值设置的参数。

以下属性为我正在尝试传入的参数名称设置了“Designer”参数。我已将其作为参数名称和类型提供。

[JsonFilter(Param="Designer", JsonDataType=typeof(Designer))]

正确的版本应为:

[JsonFilter(Param="Profile", JsonDataType=typeof(Designer))]