2013-05-25 2 views
0

В моем приложении MVC4. У меня есть представление-модель под названием SixweekRangeViewModelИспользование IValidatableObject в MVC4 в списке <T>

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, но это только идея. Что я пропущу людей?

+0

Вы проверили это сообщение: http://stackoverflow.com/questions/3400542/how-do-i-use-ivalidatableobject – Saravanan

ответ

0

Вы можете реализовать объект IValidateObject для любых классов [Models], а не только для списков. Вы должны вернуть ключ и его соответствующие значения. Поскольку вы вернули в качестве ключа только «*», значения [сообщения об ошибках] вам не показываются. Пожалуйста, проверьте это link

Смежные вопросы