Проверка на основе атрибутов с быстрой проверкой, похоже, не работает с asp.net-mvc - PullRequest
1 голос
/ 21 марта 2011

я выполнил все эти шаги в этом уроке:

Создан класс валидатора

public class ProjectValidator : AbstractValidator<ProjectViewModel>
{
    public ProjectValidator()
    {
        //RuleFor(h => h.Milestone).NotEmpty().WithName("Milestone");
        RuleFor(h => h.Applications).NotNull().WithName("Application");
        RuleFor(h => h.InitiativeName).NotNull().WithName("Business Aligned Priority");
        RuleFor(h => h.BusinessDriverId).NotNull().WithName("Business Driver");
        RuleFor(h => h.FundingTypeId).NotNull().WithName("Funding Type");
        RuleFor(h => h.Description).NotEmpty().WithName("Description");
        RuleFor(h => h.Name).NotEmpty().WithName("Project Name");
        RuleFor(h => h.Sponsors).NotNull().WithName("Sponsors");
    }
}

Поместите атрибут в моем DTO, чтобы указать этот валидатор

[Validator(typeof(ProjectValidator))]
public class ProjectViewModel
{
}

но после публикации формы, когда я иду, чтобы проверить список ошибок ModelState, ошибки, которые я вижу, происходят из проверки по умолчанию asp.net-mvc.

 public ActionResult UpdateMe(ProjectViewModel entity)
    {
        Project existingProject = this.Repository.Fetch<Project>(entity.Id);

        UpdateProperties(entity, existingProject);
        var allErrors = ModelState.Values.SelectMany(v => v.Errors);
        if (allErrors.Count() > 0)
        {

какие-либо предложения о том, почему не нужно свободно говорить. валидатор ?? Я добавил изображение ниже того, что я вижу на графическом интерфейсе

enter image description here

если я вызываю валидатор прямо в коде, он работает просто отлично:

 ProjectValidator validator = new ProjectValidator();
 ValidationResult result = validator.Validate(entity);

1 Ответ

2 голосов
/ 20 апреля 2011

Я не уверен, что это за тип HTML-элемента FundingTypeId, но я предполагаю, что это выпадающий список.Если ничего не выбрано, то это даст вам эту ошибку.К сожалению, это одно из ограничений интеграции FV с MVC, которое вызвано плохим дизайном связующего элемента модели MVC по умолчанию.Это сообщение не генерируется FV, а скорее генерируется DefaultModelBinder, в этом случае входящее значение не может быть преобразовано в тип свойства.

Ознакомьтесь с этими 2 вопросами, которые я разместил на дискуссионном форуме Fluent Validation: http://fluentvalidation.codeplex.com/discussions/250798 http://fluentvalidation.codeplex.com/discussions/253389

...