2016-01-18 2 views
-3

Я новичок в MVC, я делаю регистрационную форму, и если вы хотите зарегистрироваться, вам нужно ввести электронную почту, которая не существует в БД, и я поместил этот метод в контроллер, хорошо ли держать такие методы, как в контроллере, или я должен перенести этот метод в модель или реализовать документ IValidatableObject?Куда поместить пользовательские методы проверки?

ответ

2

вы должны поставить проверку в вашей ViewModel (или модели), а также указать Validation в модели, как это:

public class RegisterViewModel 
{ 
    public string Name { get; set; } 
    [Required(ErrorMessage = "please fill Email Address")] 
    public string Email { get; set; } 
    [Required(ErrorMessage = "please fill Password")] 

    public string Password { get; set; } 
    [Required(ErrorMessage = "please fill ConfirmPassword")] 

    [Compare("Password", ErrorMessage = "...")] 
    public string ConfirmPassword { get; set; } 
} 

и проверка формы Validate в вашем контроллере, как это:

[HttpPost] 
    public virtual ActionResult Create(RegisterViewModel registerViewModel) 
    { 
if (!ModelState.IsValid) 
      return View(registerViewModel); 
} 

и вас может создать логотипо Validation:

Create Custome Validation -Stackoverflow

Custome Validation In MVC-CodeProject

Обновлено:

Если вы хотите проверить Электронная почта Exists или нет, вы можете пользователя Remote Атрибут Как это:

[Remote("CheckEmailIsExist", "User","", ErrorMessage = "This Email Address is Exists in database , please use another",HttpMethod = "POST")] 
public string Email { get; set; } 

в контроллере:

public virtual JsonResult CheckEmailIsExist(string email) 
    { 
     return _userService.ExistsByEmail(email) 
      ? Json(false) 
      : Json(true); 
    } 

и реализовать в сервисном слое Пример:

public bool ExistsByEmail(string email) 
    { 
     return 
      _users.Any(
       user => user.Email== email); 
    } 

Sample of Implement Remote Attribute

+0

Я атрибуты, мне нужно, чтобы проверить электронную почту в базе данных, у меня есть метод Его SameEmailNotExist (INT идентификатор, строка электронной почта), я должен поставить этот метод в классе модели? – CrushJelly

+0

@CrushJelly, пожалуйста, см. Обновленный ответ! –

Смежные вопросы