Пользовательская модель Binder - Как провести повторную проверку - PullRequest
1 голос
/ 21 сентября 2010

Я использую ASP.NET MVC 2 и хочу выяснить, как повторно запустить проверку моей модели после того, как она была заполнена с помощью пользовательского связывателя.

Итак, я начну с парыклассов EF, связанных с бронированием и путешественником (в каждом бронировании может быть один или несколько путешественников)

Вот класс приятеля, которого я использую для проверки в бронировании:

[MetadataType(typeof(Booking_Validation))]
public partial class Booking {
    // partial class compiled with code produced by VS designer
}

[Bind(Include="Name")]
public class Booking_Validation {

    [Required(ErrorMessage="Booking name required")]
    public string Name { get; set; }

    [AtLeastOneTraveller(ErrorMessage="Please enter at least one traveller")]
    public EntityCollection<Traveller> Travellers;

}

public class AtLeastOneTraveller : ValidationAttribute {        
    public override bool IsValid(object value) {
        if (value != null) 
            return ((EntityCollection<Traveller>)value).Count > 0;
        return true;            
    }
}

Iиспользуйте привязку пользовательской модели для заполнения бронирования и связанных с ней путешественников, за исключением того, что ModelState.IsValid, похоже, задан еще до того, как моя привязка пользовательской модели смогла добавить путешественников к объекту бронирования, даже после этого, ModelState [«Путешественники»] по-прежнему содержит ошибку проверки, в которой говорится, что должен быть подключен хотя бы один путешественник.

Есть ли способ повторно запустить проверку после того, как механизм связывания пользовательских моделей выполнил свою задачу?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2010

Вы пробовали метод TryValidateModel в классе Controller?

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryvalidatemodel.aspx

0 голосов
/ 27 февраля 2013

Как только вы исправите элементы ошибки, вы можете очистить ModelState с помощью

ModelState.Clear();

, а затем выполнить повторную проверку с помощью

ModelState.IsValid
0 голосов
/ 20 октября 2010
...