【发布时间】:2015-06-12 12:56:24
【问题描述】:
我有必要验证一个值是否已经在数据库中。因此,我编写了一个自己的 ValidationAttribute 来检查它。 问题是我将它添加到模型中的属性中:
[UniqueAttribute(ErrorMessage = "This title already exists")]
这在添加视图中工作正常,但在编辑此对象时我不知道如何处理,因为如果用户不更改标题,也会出现错误消息,因为执行了验证。 我可以使用没有此 ValidationAttribute 的模型视图,但如果用户将标题更改为另一个仍然存在的标题,则会破坏唯一性。
您知道我如何验证编辑视图在更新对象后标题是否唯一吗?
谢谢。
示例:
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;
}
}
这在添加对象时效果很好,但在编辑时效果不佳。
【问题讨论】:
-
UniqueAttribute属性的代码是什么? -
调用数据库,检查值是否在表中,如果是则返回true,否则返回false。
-
我的代码是正确的,我不需要更正它。我正在寻找正确的想法,然后我可以自己实现它。
-
唯一直接的解决方案是在编辑视图中知道项目的 id,你应该将 id 传递给 UniqueAttribute 以便它可以检查标题是否被使用
-
如果您可以分享 UniqueAttribute 类代码,我们可以更轻松地提供帮助
标签: c# asp.net asp.net-mvc-4