如何从视图模型中获取YUI简单编辑器中的更新内容

时间:2012-02-01 08:27:37

标签: asp.net asp.net-mvc asp.net-mvc-3 razor yui

我正在使用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仍然只包含原始内容,而不是更新的内容。这是为什么?

1 个答案:

答案 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帮助程序将选择新值,而不是使用用户最初提交的值。