Как отключить проверку поля в представлении MVC? - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть приложение MVC 3. У меня есть модель под названием UserModel, которая содержит поле электронной почты, проверено на уникальность с RemoteAttribute. Я хочу использовать UserModel в 2 видах - EditUser и CreateUser. Как я могу разрешить проверку поля электронной почты в представлении EditUser (поскольку там это поле доступно только для чтения) и оставить его в представлении CreateUser?

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы можете использовать метод частичной проверки для изменения результатов проверки. В этом примере будут отклонены все ошибки в поле «Электронная почта».

public class DontValidateEmailAttribute : ActionFilterAttribute {

  public override void OnActionExecuting(ActionExecutingContext filterContext) {
    var modelState = filterContext.Controller.ViewData.ModelState; 
    var incomingValues = filterContext.Controller.ValueProvider;

    var key = modelState.Keys.Single(x => incomingValues.Equals("Email"));    
    modelState[key].Errors.Clear();

  }
}

и примените этот атрибут к своему редактору контроллеров.

Я изучил эту технику у Pro ASP NET MVC Стива Сандерсона 3 . Он использует технику для проверки модели, которая имеет обязательные поля, но ввод данных является многошаговым мастером. Если значение не было возвращено в форме сообщения, он удаляет ошибки для этого свойства.

1 голос
/ 18 ноября 2011

Хороший способ решить эту проблему - передать идентификатор пользовательской модели в качестве дополнительного поля в метод удаленной проверки. Это будет пустым или пустым при создании, но заполняется при редактировании. Затем вы можете добавить логику в метод удаленной проверки для проверки идентификатора.
Смотрите пример ниже

[Remote("ValidationMethod", "UserModel", AdditionalFields = "Id", ErrorMessage = "Error message")] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...