加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:44:25 所属栏目:asp.Net 来源:网络整理
导读:Rails具有非常方便的唯一性验证. ASP.NET MVC没有. 我需要确保用户输入的电子邮件地址尚未被任何人注册. 我只能看到一种进行这种验证的方法:在UniqueAttribute类中创建一个新的数据上下文对象. 但是我担心浪费一个新的数据上下文对象的记忆只是一个验证是危
Rails具有非常方便的唯一性验证.

ASP.NET MVC没有.

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

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

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

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

更新

这是我到目前为止

public class UniqueEmailAttribute : ValidationAttribute {
    public override bool IsValid(object value) {
        DataContext db = new DataContext();
        var userWithTheSameEmail = db.Users.SingleOrDefault(
            u => u.Email == (string)value);
        return userWithTheSameEmail == null;
    }
}

// Usage
[UniqueEmail(ErrorMessage="This e-mail is already registered")]
public string Email { get; set; }

有两个问题.

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读