【发布时间】:2011-02-27 06:08:08
【问题描述】:
我想我在这里遗漏了一些基本的东西,但我已经挖掘了两个多小时,而且肯定只是忽略了显而易见的东西。如果是这样,我很抱歉。
我有一个 MVC 3 站点,我有一个与我的控制器通信的服务层,以及一个与我的服务层通信的存储库(所有这些都使用 IoC 容器解耦,但这在这里无关紧要)。我的域模型是 EF4 实体,在控制器、服务和存储库之间共享。
我有一个看起来像这样的注册视图模型:
public class SignupViewModel
{
[DisplayName("Email")]
[Required, RegularExpression(@"^.+@.+\..+$")]
public string Email { get; set; }
[DisplayName("Password")]
[Required]
public string Password { get; set; }
[DisplayName("Confirm password")]
[Required, Compare("Password")]
public string PasswordConfirmation { get; set; }
}
我的用户域模型如下所示:
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public string PasswordSalt { get; set; }
}
我有一个用于注册用户的服务方法,看起来像这样:
public void Register(User user, string planTextPassword)
{
//Make sure the email address is not taken.
bool emailIsTaken = IsEmailTaken(user.Email);
if (emailIsTaken)
{
//What do I do here?
}
else
{
//Create the user.
}
}
最后,我的控制器动作将它们捆绑在一起:
public ActionResult Signup(SignupViewModel signupViewModel)
{
if (ModelState.IsValid)
{
_accountService.Register(Mapper.Map<SignupViewModel, User>(signupViewModel), signupViewModel.Password);
_unitOfWork.Commit();
}
return View(signupViewModel);
}
正如您在我的服务方法中的注释中看到的,当服务级别验证失败时我该怎么办?正如this question 中所讨论的,我不应该抛出异常。但我不确定我是否遵循 Ryan 的建议,或者即使这仍然适用(即现在是否有更好的方法来处理 MVC 3 或其他可用的工具,如 Fluent Validation)。
就像我说的那样,我想我现在只能只见树木不见森林,但是在过去的两三个小时里我试图自己弄清楚,我想我可能会运气更好问一个问题。
提前致谢。
【问题讨论】:
标签: asp.net-mvc validation asp.net-mvc-3