如果我的视图模型看起来像这样:
public class FlightViewModel {
public BookingFlight BookingFlight { get; set; } // contains list of FlightPassengers
public FlightPassenger AddedPassenger { get; set; }
}
我有一个视图,显示两个模型的编辑器以及输出BookingFlight中包含的FlightPassengers列表的webgrid,类似于:
@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部件。在理想情况下,用户可以在没有任何航班信息有效的情况下添加有效乘客。
那么只验证视图模型部分的最佳方法是什么?或者我是否会以错误的方式解决这个问题?
答案 0 :(得分:1)
如果您使用的是单一视图模型类,则可以实现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&gt; 0,那么视图模型将不会验证。
请注意,如果您在视图中使用了验证消息,我认为您可能需要验证摘要以添加yield
'ed ValidationResult