验证唯一属性

时间:2015-06-12 12:56:24

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

我有必要验证某个值是否已存在于数据库中。因此,我编写了一个自己的ValidationAttribute来检查它。 问题是我将它添加到模型中的属性:

[UniqueAttribute(ErrorMessage = "This title already exists")]

在添加视图中工作正常,但在编辑此对象时,我不知道如何处理此问题,因为如果用户没有更改标题,则还会出现错误消息,因为执行验证。 我可以使用没有此ValidationAttribute的modelview,但如果用户将标题更改为仍然存在的另一个标题,则会违反唯一性。

如果在更新对象后标题是唯一的,您是否知道如何验证编辑视图?

谢谢。

示例:

public class UniqueAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return true;
        }

        MyDataContext db = new MyDataContext();
        foreach (var item in db.AnyObjects.ToList())
            if (item.Title.Equals(value))
                return false;
        return true;
    }
}

这在添加对象时很有效,但在编辑时则不行。

1 个答案:

答案 0 :(得分:0)

在您的模型中,创建一个存储先前(未更改或现有)标题的新属性。因此,在Add的情况下,这将是string.empty,在编辑的情况下,它将是未修改的标题值。在验证中使用反射来将此属性与title属性进行比较。如果它们匹配(并且不是都是string.empty),那么这意味着用户编辑了记录但没有更改标题,您的验证只是通过。如果它们不匹配,则表示用户更改了标题,如果用户输入的新标题已存在,则可以检查数据库。