Различные проверки на нескольких моделях в представлении - PullRequest
2 голосов
/ 10 июня 2011

Если у меня модель вида выглядит примерно так:

    public class FlightViewModel {
    public BookingFlight BookingFlight { get; set; } // contains list of FlightPassengers
    public FlightPassenger AddedPassenger { get; set; }
}

У меня есть представление, в котором отображается редактор для обеих моделей вместе с сеткой, выводящей список FlightPassengers, содержащийся в BookingFlight, аналогично этому:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
        <legend>Flight Booking</legend>
        @Html.Partial("_CreateOrEditBookingFlight")
        @Html.Partial("_CreateOrEditPassenger")
        @grid.GetHtml()
        <p>
            <button name="button" value="addPassenger">Add New Passenger</button>
            <button name="button" value="submitBooking">Submit Booking</button>
        </p>
}

Моя проблема заключается в том, что обе кнопки требуют правильной проверки деталей BookingFlight и FlightPassenger.В идеальном случае пользователь может добавить действительного пассажира без указания действительной информации о рейсе.

Так, каков наилучший способ проверки только частей модели представления?Или я все об этом говорю не так?

1 Ответ

1 голос
/ 10 июня 2011

Если вы используете одиночный класс модели представления, вы можете реализовать IValidatableObject и его Validate метод

public class FlightViewModel : IValidatableObject {
    public BookingFlight bookingFlight { get; set; } // contains list of FlightPassengers
    public FlightPassenger addedPassenger { get; set; }

    public IEnumerable<ValidationResult> Validate(
        ValidationContext validationContext) {

        // .IsValid properties are made up
        if (!bookingFlight.IsValid && !addedPassenger.IsValid)
            yield return new ValidationResult("Something blew up", new string[] { "addedPassenger", "bookingFlight" });

        // implement other validation and yield additional
        // ValidationResult's as needed
    }
}

Таким образом, если возвращенное значение IEnumerable<ValidationResult> имеет .Count> 0, то модель представления не будет проверена.

Имейте в виду, что если вы используете сообщения проверки в вашем представлении, я думаю, вам может понадобиться проверка Сводка для любого добавленного yield 'ed ValidationResult.

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