Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 数据库中重复用户名的自定义验证_Asp.net Mvc_Asp.net Mvc 3_Ninject - Fatal编程技术网

Asp.net mvc 数据库中重复用户名的自定义验证

Asp.net mvc 数据库中重复用户名的自定义验证,asp.net-mvc,asp.net-mvc-3,ninject,Asp.net Mvc,Asp.net Mvc 3,Ninject,如果您有更好的方法来处理自定义验证,请让我知道。我不想要这个服务层 阅读下面第五个选项我想要的内容。 我有 1 - IUserRepository -> bool IsUserRegistered(string userName); 2-带方法的用户存储库 readonly EFDBContainer _db = new EFDBContainer(); public bool IsUserRegistered(string userName) { return _db.User

如果您有更好的方法来处理自定义验证,请让我知道。我不想要这个服务层

阅读下面第五个选项我想要的内容。

我有

1 - IUserRepository -> bool IsUserRegistered(string userName);
2-带方法的用户存储库

readonly EFDBContainer _db = new EFDBContainer();
public bool IsUserRegistered(string userName)
{
    return _db.Users.Any(d => d.UserName == userName);
}
3-9对象-->用户控制器为DI

public static void RegisterServices(IKernel kernel) 
{
    kernel.Bind<IUserRepository>().To<UserRepositary>();
}
在控制器上创建方法

private readonly IUserRepository _repository;
public ProfileController(IUserRepository repository)
{
    _repository = repository;
}
HttpPost]
public ActionResult Create(string confirmButton, User user)
{
    if (ModelState.IsValid)
    {
        try
        {
            _repository.Create(user); --> This calling Create Method below before this EnsureValid is Called
            return //Do Redirection

        }
        catch (RuleViolationException)
        {
            this.UpdateModelStateWithViolations(user, ViewData.ModelState);
        }
    }
    return //to View;
}
从存储库创建方法

public void Create(User user)
{
    user.EnsureValid(); --> Go to User object and do validation
    //Add object to DB
}
5-我想要什么:

这里我需要DI,这样我就可以在用户对象上调用第一个IsUserRegistered接口方法 下面注册的IsUserRegistered现在不工作。我需要一种使用界面的方法

public partial class User: IRuleEntity
{
    public List<RuleViolation> GetRuleViolations()
    {
        List<RuleViolation> validationIssues = new List<RuleViolation>();

        if (IsUserRegistered(userName))
            validationIssues.Add(new RuleViolation("UserName", UserName, "Username already exists. Please enter a different user name."));

        return validationIssues;
    }

    public void EnsureValid()
    {
        List<RuleViolation> issues = GetRuleViolations();

        if (issues.Count != 0)
            throw new RuleViolationException("Business Rule Violations", issues);
    }
}
公共部分类用户:IRuleEntity
{
公共列表GetRuleViolations()
{
List ValidationSues=新列表();
if(IsUserRegistered(用户名))
添加(新的规则冲突(“用户名”,用户名,“用户名”已存在。请输入其他用户名“);
返还诉讼;
}
公共无效,重新生效()
{
列出问题=GetRuleViolations();
如果(issues.Count!=0)
抛出新的RuleViolationException(“业务规则违规”,问题);
}
}

编写自己的验证属性并将其添加到用户名中

看。它解释了如何将依赖项注入到验证器中

另请参见Ninject MVC扩展附带的示例应用程序—它有一个具有依赖关系的验证器示例