MVC 5模型。使Enum属性唯一/排名。验证强制属性的唯一值

时间:2014-10-07 12:26:12

标签: asp.net-mvc validation properties enums unique

我有这个枚举RankValue和属性IntroAnswers1 -5,它在我的视图中成为一个下拉选择器。这一切都很好。但我想要的是强迫用户输入唯一值:

只有一个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; }
}

1 个答案:

答案 0 :(得分: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;
    }
}
相关问题