我试图通过将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
答案 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)
...