我正在使用ASP.NET MVC3
razor
视图引擎。我还使用Yahoo User Interface 2 (YUI2)
simple editor。
我的视图有一个名为ProductEditViewModel
的视图模型。在此视图模型中,我有一个定义为:
public string LongDescription { get; set; }
在我看来,我将从这个输入字段创建YUI2简单编辑器。该字段在视图中定义如下:
<td>@Html.TextAreaFor(x => x.LongDescription, new { cols = "75", rows = "10" })<br>
@Html.ValidationMessageFor(x => x.LongDescription)
</td>
以下是我的编辑操作方法的部分视图:
[Authorize]
[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(ProductEditViewModel viewModel)
{
if (!ModelState.IsValid)
{
// Check if valid
}
// I added this as a test to see what is returned
string longDescription = viewModel.LongDescription;
// Mapping
Product product = new Product();
product.InjectFrom(viewModel);
// Update product in database
productService.Update(product);
return RedirectToRoute(Url.AdministrationProductIndex());
}
当我查看longDescription变量的内容时,它应该包含编辑器中的值。如果我在编辑器中编辑内容,则longDescription仍然只包含原始内容,而不是更新的内容。这是为什么?
答案 0 :(得分:0)
我怀疑在你的POST动作的某个地方你写过这样的东西:
[Authorize]
[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(ProductEditViewModel viewModel)
{
...
viewModel.LongDescription = "some new contents";
return View(viewModel);
}
如果是这种情况,那么在修改之前应确保已从ModelState中清除了值,因为HTML帮助程序将始终首先使用模型状态中的值,然后使用模型中的值。
因此,每当您打算在POST操作中手动修改视图模型的某些属性时,请确保将其从modelstate中删除:
ModelState.Remove("LongDescription");
viewModel.LongDescription = "some new contents";
return View(viewModel);
现在,当显示视图时,依赖于LongDescription
属性的HTML帮助程序将选择新值,而不是使用用户最初提交的值。