Я создал частичное представление в приложении MVC 3. Это представление имеет строго типизированную модель, подобную этой:
public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;
set;
} ...
}
В моем методе действия я вызываю метод PartialView следующим образом
PartialView("ProductViewModel", products[0]);
Но на странице я не вижу никакой разметки для логики проверки, и ничего не происходит, если на странице есть какие-либо ошибки. Если я использую это частичное представление как шаблон редактора, оно работает.
Любая помощь приветствуется.
Редактировать: если быть более точным, у меня есть HTML-форма, и я хочу добавить в нее разметку с помощью обновления ajax (если пользователь нажимает кнопку, я хочу добавить новую разметку в эту форму). Если я включаю эти элементы управления статически, я имею в виду, что если я отображаю их при загрузке страницы, проверка работает, но если я добавляю элементы управления в эту форму с помощью вызова ajax, для этих элементов управления не добавляется разметка проверки. Мой частичный вид выглядит так:
@Html.LabelFor(x => x.ProductPrice)
@Html.TextBoxFor(x => x.ProductPrice)
@Html.ValidationMessageFor(x => x.ProductPrice)
Моя форма выглядит так:
@using (Html.BeginForm())
{
<div id="div_Products">
@Html.EditorFor(x => x)
</div>
<input type="submit" value="Compare" />
}
Код выше работает хорошо, проверка работает. На стороне сервера я вызываю метод действия, который выглядит следующим образом:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };
return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}
Я выяснил, что механизм MVC вставляет эту разметку проверки только в том случае, если обнаруживает, что элементы управления находятся внутри элемента управления формы. Когда я пытаюсь обновить свой элемент управления формой с помощью ajax-вызова, MVC не может знать, что они будут помещены в элемент формы, и поэтому, я полагаю, не выдает для них никакой логики проверки.