在List <t> </t>中的MVC4中使用IValidatableObject

时间:2013-05-25 16:17:24

标签: c# asp.net-mvc asp.net-mvc-4

在我的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对象中实现,但这只是一个想法。我错过了什么人?

1 个答案:

答案 0 :(得分:0)

您可以为任何类[Models]实现IValidateObject,而不仅仅为列表实现。您应该返回密钥及其相应的值。由于您仅返回“*”作为键,因此不会向您显示值[错误消息]。请查看此link