Работает нормально для меня.Вот шаги:
- Создание нового RTM-проекта ASP.NET MVC 3 с использованием шаблона Visual Studio по умолчанию
- Загрузка последней FluentValidation.NET
- Ссылка на сборки
FluentValidation.dll
и FluentValidation.Mvc.dll
(будьте осторожны, внутри .zip есть две папки: MVC2 и MVC3, поэтому убедитесь, что вы выбрали правильную сборку)
Добавьте модель:
[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
public string Title { get; set; }
}
и соответствующий валидатор:
public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
public MyViewModelValidator()
{
RuleFor(x => x.Title)
.NotEmpty()
.WithMessage("Title is required")
.Length(1, 5)
.WithMessage("Title must be less than or equal to 5 characters");
}
}
Добавить к Application_Start
:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
new AttributedValidatorFactory());
Добавить контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
и соответствующий вид:
@model SomeApp.Models.MyViewModel
@{
ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.Title)
@Html.ValidationMessageFor(x => x.Title)
<input type="submit" value="OK" />
}
Теперь попробуйте отправить форму, оставив ввод заголовка пустым => проверка на стороне клиента активируется и на экране появится сообщение Заголовок требуется .Теперь начните вводить текст => сообщение об ошибке исчезнет.После того, как вы введете более 5 символов в поле ввода, заголовок должен быть меньше или равен 5 символам появится сообщение проверки.Так что все, кажется, работает как ожидалось.