2014-10-07 1 views
0

У меня есть это перечисление RankValue и свойства IntroAnswers1 -5, который становится селектором выпадающего списка на мой взгляд. Все в порядке. Но я хочу, чтобы пользователь вводил уникальные значения:Модель MVC 5. Создание уникальных свойств Enum/Ranked. Validation force уникальные значения для свойств

Только один A, один B, один C, один D, один E-выбор.

Возможно ли это сделать с подтверждением в моей модели? Что вы посоветуете как хорошую практику для решения этой проблемы?

//enum rank 
//SCOPE REACES WHOLE NAMESPACE 
public enum RankValue 
{ 
    a=1, b=2, c=3, d=4, e=5 
} 

public class IntroResponse 
{ 
    [Required()] 
    public RankValue? IntroAnswer1 { get; set; } 
    [Required()] 
    public RankValue? IntroAnswer2 { get; set; } 
    [Required()] 
    public RankValue? IntroAnswer3 { get; set; } 
    [Required()] 
    public RankValue? IntroAnswer4 { get; set; } 
    [Required()] 
    public RankValue? IntroAnswer5 { get; set; } 
} 

ответ

0

Возможно, проще всего определить правило пользовательской проверки правильности для вашей модели. Для этого вы можете реализовать интерфейс IValidatableObject. Ниже я написал несколько вариантов того, что можно было бы сделать, но это определенно не идеально, поэтому не стесняйтесь приспосабливать его к вашим потребностям.

public class IntroResponse : IValidatableObject 
{ 
    ... 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     IList<RankValue?> answers = new List<RankValue?>{IntroAnswer1, IntroAnswer2, ...}; 
     var results = new List<ValidationResult>(); 

     if (answers.Where(a => a == RankValue.a).Count() >= 2) 
     { 
      results.Add(new ValidationResult("a can be used only once!")); 
     } 
     ... 
     return results; 
    } 
} 
+0

Могу ли я поместить этот код в контроллер как новый отдельный класс? – Tigerhajen

+0

@JuliusHolmberg, это тот же самый класс модели, который вы уже определили, просто расширен для реализации интерфейса. – Andrei

+0

Это дает мне сообщение об ошибке: «Некоторые недопустимые аргументы» в списке – Tigerhajen

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