在列表中使用MVC4中的IValidatableObject
本文关键字:IValidatableObject 中的 MVC4 列表 | 更新日期: 2023-09-27 18:15:24
在我的MVC4应用程序。我有一个名为SixweekRangeViewModel
public class SixweekViewModel: IValidatableObject
{
public int Position { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (StartDate.HasValue || EndDate.HasValue)
{
if (!StartDate.HasValue || !EndDate.HasValue)
{
yield return new ValidationResult("*");
// new string[] { "StartDate", "FinalDate" }
}
}
}
}
这是我显示项目的视图
@model List<Contoso.MvcApplication.ViewModels.Assignments.SixweekViewModel>
<h2>Configure Sixweeks</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Configure Sixweeks</legend>
@for (int i = 0; i < Model.Count; i++) {
<div>
@Html.HiddenFor(model => model[i].Position)
@Html.TextBoxFor(model => model[i].StartDate, "{0:d/MMM/yyyy}", new { @class = "from" + i })
@Html.TextBoxFor(model => Model[i].EndDate, "{0:d/MMM/yyyy}", new { @class = "to" + i })
</div>
}
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
当我按Save时,调试器得到validationResult作为错误。但是千万不要在视图中显示错误信息。
我认为IValidatableObject
应该在List<T>
中实现,而不是在T
对象中实现,但这只是一个想法。我错过了什么?
你可以为任何类[Models]实现IValidateObject,而不仅仅是列表。您应该返回键及其对应的值。因为您只返回了"*"作为键,所以没有向您显示值[错误消息]。请点击此链接