C# 唯一属性的验证
我有必要验证数据库中是否已经存在值。因此,我编写了自己的ValidationAttribute来检查它。 问题是我将此添加到模型中的属性:C# 唯一属性的验证,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我有必要验证数据库中是否已经存在值。因此,我编写了自己的ValidationAttribute来检查它。 问题是我将此添加到模型中的属性: [UniqueAttribute(ErrorMessage = "This title already exists")] 这在添加视图中工作正常,但在编辑此对象时,我不知道如何处理此问题,因为如果用户不更改标题,也会出现一条错误消息,因为验证已执行。 我可以使用没有此ValidationAttribute的modelview,但如果用户将标题更改为另一个
[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;
}
}
这在添加对象时效果良好,但在编辑时效果不佳。在模型中创建一个新属性,用于存储以前的(未更改或现有)标题。因此,在添加的情况下,它将是string.empty,在编辑的情况下,它将是未修改的标题值。在验证中使用反射将此属性与title属性进行比较。如果它们当时匹配(并且不是都是string.empty),那么这意味着用户编辑了记录,但没有更改标题,您的验证就通过了。如果它们不匹配,这意味着用户更改了标题,您可以检查数据库,如果用户输入的新标题已经存在。您的
UniqueAttribute
属性的代码是什么?调用数据库,检查值是否在表中,如果是则返回true,如果不是则返回false。我的代码是正确的,我不需要更正它。我正在寻找正确的想法,然后我可以自己实现它。唯一简单的解决方案是在编辑视图中知道项目的id,并且您应该将id传递给UniqueAttribute,以便它可以检查标题是否正在使用。如果您可以共享UniqueAttribute类代码,我们有人可以更容易地帮助我如何获取标题属性在Validation类中,因为我使用上面的形式,并且IsValid方法只获取一个参数。使用validationcontext,您可以使用反射来获取另一个属性。查看此帖子:很抱歉,我不理解这篇文章。我不知道该怎么解决我的问题