gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:59:21 24 4
gpt4 key购买 nike

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 类,而不是用于电子邮件、用户名等的单独类。我该怎么做?
  • 创建 新品 每次需要验证单个属性时的数据上下文。

  • 解决方案

    所以最后我在表上创建了一个唯一的约束,现在我只需要拦截用户存储库中的 SqlException 。效果很好,并且可能比在整个表中搜索相同节点更有效。谢谢!

    最佳答案

    Mvc 3 Relaease 候选者具有新的新验证属性作为远程验证 - 您可以在其中注册一种在客户端(jquery)上进行验证的方法。

    见下面的例子-
    远程属性

    新的 RemoteAttribute 验证属性利用了 jQuery 验证插件的远程验证器,它使客户端验证能够调用服务器上执行实际验证逻辑的方法。

    在以下示例中,UserName 属性应用了 RemoteAttribute。在 Edit View 中编辑此属性时,客户端验证将调用 UsersController 类上名为 UserNameAvailable 的操作以验证此字段。

    public class User {  
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
    }

    以下示例显示了相应的 Controller 。
    public class UsersController {  
    public bool UserNameAvailable(string username) {
    return !MyRepository.UserNameExists(username);

    }
    }

    Mvc 3

    更新
        public bool UserNameAvailable(string Propertyname)  
    {
    if (Request.QueryString[0]= "UserName")
    {
    //validate username
    }
    elseif (Request.QueryString[0]= "Email")
    {
    //Validate Email
    }

    }

    关于asp.net-mvc - ASP.NET MVC 唯一性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298835/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com