asp.net-mvc – ASP.NET MVC验证的唯一性

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC验证的唯一性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Rails具有非常方便的唯一性验证.

ASP.NET MVC没有.

我需要确保用户输入的电子邮件地址尚未被任何人注册.

我只能看到一种进行这种验证的方法:在UniqueAttribute类中创建一个新的数据上下文对象.

但是我担心浪费一个新的数据上下文对象的记忆只是一个验证是危险的.

我错了吗?有没有更好的方法呢?

更新

这是我到目前为止

  1. public class UniqueEmailAttribute : ValidationAttribute {
  2. public override bool IsValid(object value) {
  3. DataContext db = new DataContext();
  4. var userWithTheSameEmail = db.Users.SingleOrDefault(
  5. u => u.Email == (string)value);
  6. return userWithTheSameEmail == null;
  7. }
  8. }
  9.  
  10. // Usage
  11. [UniqueEmail(ErrorMessage="This e-mail is already registered")]
  12. public string Email { get; set; }@H_301_17@
  13. 有两个问题.

  14. 只要有一个UniqueAttribute类就可以了,而不是用于电子邮件,用户名等的类别.我该怎么做?
    >每次需要验证单个属性时创建新的数据上下文.

  15. 所以最后我在表上创建了一个唯一的约束,现在我只需要拦截Users库中的sqlException.工作很好,可能比在整个表中搜索同一个节点效率更高.谢谢!

解决方法

这样做的一个愚蠢的方法是创建一个验证属性,该属性查询数据库的电子邮件地址.这肯定会增加延迟.

一个替代方法是在表上创建一个唯一的约束并拦截sqlException.

猜你在找的asp.Net相关文章