Пользовательская проверка модели на основе двух свойств. Одно влияет на другое - PullRequest
5 голосов
/ 16 марта 2011

Использую Asp.Net MVC 2 с фреймворком сущностей 4. Вот ситуация: У меня есть флажок и текстовое поле (Выбор даты). Если флажок установлен, текстовое поле является обязательным. Если флажок ложен, текстовое поле не требуется.
Флажок True => Текстовое поле обязательно
Флажок False => Текстовое поле не требуется

<%:Html.CheckBoxFor(model => model.oEnvironment.Remediate) %>
<%= Html.TextBoxFor(model => model.oEnvironment.DatePick)%>

Я знаю, как создать атрибут ValidationAttribute, но я не знаю, как создать класс проверки, который проверяет, установлен ли флажок (если мой атрибут Entity Remediate Attribute имеет значение true), а затем при необходимости устанавливает поле DatePick.

Любая идея?

Ответы [ 5 ]

4 голосов
/ 14 июня 2011

Попробуйте ссылку . Это должно помочь вам начать.

2 голосов
/ 18 июня 2011

Если вам не нужна проверка клиента, я предлагаю вам использовать ModeState.AddModelError для проверки вашей логики (в вашем контроллере).

Что-то вроде:

[HttpPost]
public ActionResult Edit(MyModel model)
{
        if (model.Remediate && string.IsNullOrEmpty(model.DatePick))
            ModelState.AddModelError("DatePickRequired", "DatePick is required");
        if (!ModelState.IsValid)
            return View(model);
        return View();
}

Gtz,Stéphane.

0 голосов
/ 18 июня 2011

Для комплексной проверки просто выполните проверку в действии (или в любом месте на стороне сервера).

0 голосов
/ 15 июня 2011

В качестве совершенно другого подхода вы можете взглянуть на проект Fluent Validation http://fluentvalidation.codeplex.com/, который хорошо работает с MVC благодаря инверсии контейнера управления http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentation и http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/

Это должно позволить вам действительно хорошо кодировать это и подобные правила, а в статьях IOC показано, как интегрировать в MVC <3 </p>

(не совсем ответ, как вы указали MVC2, но обновление до MVC3 также упростит эту задачу, поскольку оно поддерживает проверку на уровне модели http://www.asp.net/mvc/mvc3#BM_Model_Validation_Improvements)

0 голосов
/ 16 марта 2011

Возможно, вам удастся реализовать интерфейс IDataErrorInfo на вашей модели, хотя я сам никогда не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...