Asp.net mvc 视图中多个模型的不同验证
如果我的视图模型看起来像这样:Asp.net mvc 视图中多个模型的不同验证,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,如果我的视图模型看起来像这样: public class FlightViewModel { public BookingFlight BookingFlight { get; set; } // contains list of FlightPassengers public FlightPassenger AddedPassenger { get; set; } } 我有一个视图,显示两个模型的编辑器以及一个webgrid,输出BookingFlight中包含的航班
public class FlightViewModel {
public BookingFlight BookingFlight { get; set; } // contains list of FlightPassengers
public FlightPassenger AddedPassenger { get; set; }
}
我有一个视图,显示两个模型的编辑器以及一个webgrid,输出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>
}
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
机票预订
@Html.Partial(“\u CreateOrEditBookingFlight”)
@Html.Partial(“\u CreateOrEditPassenger”)
@grid.GetHtml()
增加新乘客
提交预订
}
我的问题是:这两个按钮都需要正确验证BookingFlight和FlightPassenger部件。在理想情况下,用户可以在没有任何航班信息的情况下添加有效的乘客
那么,仅验证viewmodel的一部分的最佳方法是什么?还是我的做法完全错了?如果使用单个视图模型类,可以实现
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
}
}
公共类FlightViewModel:IValidatableObject{
公共预订航班预订航班{get;set;}//包含航班乘客列表
公共航班乘客附加乘客{get;set;}
公共IEnumerable验证(
ValidationContext(验证上下文){
//.IsValid属性是由
如果(!bookingFlight.IsValid&!addedPassenger.IsValid)
返回新的ValidationResult(“有东西爆炸了”,新字符串[]{“addedPassenger”,“bookingFlight”});
//实施其他验证并产生额外的
//根据需要验证结果
}
}
因此,如果IEnumerable
返回的.Count>0,则视图模型将不会验证
请记住,如果您在视图中使用验证消息,我认为您可能需要添加任何yield
'edValidationResult
的验证摘要