У меня есть вид MVC3, который позволяет пользователю создавать несколько разных вещей. В родительском представлении формы для этого разбиты на вкладки пользовательского интерфейса jquery, как показано ниже:
<div id="tabs">
<ul>
<li><a href="#tabs-1">New Thing 1</a></li>
<li><a href="#tabs-2">Different New Thing</a></li>
</ul>
<div id="tabs-1">@Html.Action("CreateNewThing", "NewThingController")</div>
<div id="tabs-2">@Html.Action("CreateDifferentThing", "DifferentThing")</div>
<div></div>
</div>
<script type="text/javascript">
$(function () {
$("#tabs").tabs();
});
</script>
В частичном представлении у меня есть:
@model NewThingViewModel
@using (Html.BeginForm("CreateNewThing", "NewThingController", FormMethod.Post, new { id = "frmCreateNewThing" }))
{
...
с полями ввода, кнопкой отправки и т. Д. Это, кажется, работает хорошо: оно рендерит все и прекрасно передает правильный метод действия контроллера.
Однако сейчас я провожу проверку и у меня возникла проблема.
В контроллере он отображает вид следующим образом:
public ActionResult CreateNewThing(NewThingViewModel model)
{
... initializing model fields, drop downs etc.
return PartialView("CreateNewThing", model);
}
У меня есть отдельный метод записи, например:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateNewThing(NewThingViewModel newThingViewModel, FormCollection collection)
{
.....
}
Пример модели:
public class NewThingViewModel
{
[Required]
[StringLength(50)]
[Display(Name = "Display Name:")]
public string DisplayName { get; set; }
}
Проблема в том, что когда на странице впервые появляются поля, помеченные как [Обязательные] через DataAnnotations в модели, отображаются красным, а также сводка проверки, показывающая, что они недействительны при первоначальном отображении страницы. И.Е. он действует так, как будто он уже был опубликован до того, как пользователь вводит что-либо при начальной загрузке или даже помещает что-либо в текстовые поля.
Я знаю, что первый не-пост CreateNewThing запускается, потому что я могу перехватить его в отладчике, и я знаю, что второй не при начальной загрузке.
Что может вызвать срабатывание моих проверок на Get?
Это связано с тем, как работает Html.Action и с тем, что я рендеринг частичных представлений в другое представление?
Я использую UnobtrusiveJavaScriptEnabled и ClientValidationEnabled = true в web.config.
Я не могу найти кого-то еще, кто столкнулся с этой конкретной проблемой. Кажется, что работает любой другой пример, но опять же я не нахожу пример, где представление разбито на три части, содержащиеся на вкладках jquery ui.
Как мне это исправить?
Опции:
Нужно ли вручную манипулировать Model.IsValid в качестве обходного пути?
Используйте другой механизм для визуализации частичных представлений в родительском представлении вместо Html.Action?
Использовать какой-нибудь javascript / jquery, чтобы перехватить проверку и остановить ее?