Почему моя проверка запускается по запросу get перед публикацией в MVC3? - PullRequest
4 голосов
/ 30 марта 2012

У меня есть вид 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, чтобы перехватить проверку и остановить ее?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

У вашего метода GET нет параметров метода.Вы можете инициализировать пустую модель и передать ее в представление, но вам не нужно, чтобы модель передавалась в метод

2 голосов
/ 30 марта 2012

Вы передаете «пустую» модель (которая, как я полагаю, имеет значения по умолчанию, установленные для ваших требуемых свойств), когда вы должны передать ноль .

...