模型不会在编辑POST上使用json绑定

时间:2011-09-18 11:05:42

标签: json asp.net-mvc-3 jquery

我试图通过将JSON传递给我的控制器动作来使用jQuery AJAX更新模型。 我可以看到值正在到达我的控制器,但我的一些模型属性如BackgrounColor和BackgroundImage没有更新。为什么我在这里失踪。

    public PartialViewResult Edit(Header header)
    {
        // Get the record from the database

        Header oHeader = CreateHeaderObj(header);
        Header dbHeader = _headerRepo.GetHeader(header.Id);

        // Set the properties from the form
        // Todo : Needs better mapping
        dbHeader.Title = oHeader.Title;
        dbHeader.TitleImage = oHeader.TitleImage;
        dbHeader.BackgroundColor = oHeader.BackgroundColor;
        dbHeader.BackgroundImage = oHeader.BackgroundImage;
        dbHeader.ImageBackDefault = oHeader.ImageBackDefault;
        dbHeader.ImageBackClick = oHeader.ImageBackClick;
        dbHeader.ImageHomeDefault = oHeader.ImageHomeDefault;
        dbHeader.ImageHomeClick = oHeader.ImageHomeClick;
        dbHeader.Mode = oHeader.Mode;

        // Check if model properties are valid
        if (ModelState.IsValid)
        {
            // Model state is valid, proceed with update
            UpdateModel(dbHeader);
            _headerRepo.Save();
            return PartialView("_Display", dbHeader);
        }
        else
        {
            throw new Exception("Failed to update record.");
        }
    }

此致

赖安

编辑: CreateHeaderObj函数返回一个带有修改值的Header模型,如果背景是有效的十六进制,则前缀为background-color:#。我可以看到我的backgroundcolor属性从#f9f9f9更新为background-color:#f9f9f9但它没有保存到数据库中。我得到的只是f9f9f9

1 个答案:

答案 0 :(得分:0)

如果您打算在POST控制器操作中更改视图模型中的某些值,则需要先从ModelState中删除它们。因为HTML帮助程序在绑定其值然后在模型中时首先查看modelstate。

ModelState.Remove("Title");
dbHeader.Title = oHeader.Title;

ModelState.Remove("TitleImage");
dbHeader.TitleImage = oHeader.TitleImage;

// ... you get the point

您应该为具有相应输入字段的每个属性执行此操作,并为其修改用户输入的原始值:

@Html.TextBoxFor(x => x.Title)
...