Как получить обновленное содержимое в простом редакторе YUI из вашей модели представления - PullRequest
0 голосов
/ 01 февраля 2012

Я использую ASP.NET MVC3 с механизмом просмотра razor. Я также использую Yahoo User Interface 2 (YUI2) простой редактор .

У моего вида есть модель вида под названием 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 голосов
/ 01 февраля 2012

Я подозреваю, что где-то в вашем действии POST вы написали что-то вроде этого:

[Authorize]
[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(ProductEditViewModel viewModel)
{
     ...
     viewModel.LongDescription = "some new contents";
     return View(viewModel);
}

Если это так, то вам следует убедиться, что вы очистили значение из ModelState, прежде чем изменять его, потому что помощники HTML всегда будут сначала использовать значение из состояния модели, а затем из модели.

Таким образом, каждый раз, когда вы намереваетесь вручную изменить какое-либо свойство модели представления внутри действия POST, обязательно удалите его из состояния модели:

ModelState.Remove("LongDescription");
viewModel.LongDescription = "some new contents";
return View(viewModel);

Теперь, когда отображается представление, помощники HTML, зависящие от свойства LongDescription, будут выбирать новое значение вместо того, которое было изначально указано пользователем.

...