2010-10-28 3 views
3

Есть ли способ в Asp.Net MVC использовать какую-то хорошую проверку?Asp.Net MVC - FluentValidation

I означает, вместо проверки мой росо так:

public class User { 

    [Required] 
    public int Id { get; set; } 

Имея что-то вроде этого (во внешнем классе):

User.Validate("Required", "Id"); 

ли что-то возможно в Asp.Net MVC 2 (или 3)?

Я знаю, что библиотека FluentValidation существует, но мне будет интересно узнать, разрешает ли что-то в основе Asp.Net MVC.

Мне не нравится загрязнять мой POCO. Кроме того, что произойдет, если мне нужно проверить, пусть говорят, что BeginDate до EndDate? С атрибутом вы не можете этого сделать.

ответ

9

FluentValidation хорошо сочетается with ASP.NET MVC. Он поставляется с модельным связующим, позволяющим автоматически применять правила проверки.

Так, например:

[Validator(typeof(MyViewModelValidator))] 
public class MyViewModel 
{ 
    public int? Id { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

public class MyViewModelValidator : AbstractValidator<MyViewModel> 
{ 
    public MyViewModelValidator() 
    { 
     RuleFor(x => x.Id) 
      .NotNull(); 
     RuleFor(x => x.EndDate) 
      .GreaterThan(x => x.StartDate); 
    } 
} 

, а затем ваши действия контроллера:

[HttpPost] 
public ActionResult Index(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // The model is valid => process it 
     return RedirectToAction("Success"); 
    } 
    // Validation failed => redisplay the view in order to show error 
    // messages 
    return View(model); 
} 
+0

Но я думаю, что проверка на стороне клиента не является совершенным? – Melursus

+0

Нет, это не префект, но он работает с простыми правилами, такими как «NotNull». Для пользовательских функций вам необходимо написать собственную проверку на стороне клиента. –

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