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扩展附带的示例应用程序—它有一个具有依赖关系的验证器示例