0

Я использую ASP.NET MVC 4 и последние FluentValidation.Как получить сообщение об ошибке для переключателей с использованием FluentValidation

Я изо всех сил пытаюсь проверить свои переключатели. Когда я нажимаю кнопку «Отправить», мне нужен выбор в списке переключателей.

На мой взгляд, я следующее:

@model MyProject.ViewModels.Servers.ServicesViewModel 
@Html.ValidationMessageFor(x => x.ComponentTypeId) 
@foreach (var componentType in Model.ComponentTypes) 
{ 
    <div> 
      @Html.RadioButtonFor(x => x.ComponentTypeId, componentType.Id, new { id = "emp" + componentType.Id }) 
      @Html.Label("emp" + componentType.Id, componentType.Name) 
    </div> 
} 

Мой класс ComponentType:

public class ComponentType : IEntity 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

Часть моего метода действий, где я установить свойства моей точки зрения модели:

ServicesViewModel viewModel = new ServicesViewModel 
{ 
    ComponentTypes = componentTypeRepository.FindAll(), 
    Domains = domainRepository.FindAll() 
}; 

Моя модель:

[Validator(typeof(ServicesViewModelValidator))] 
public class ServicesViewModel 
{ 
    public int ComponentTypeId { get; set; } 

    public IEnumerable<ComponentType> ComponentTypes { get; set; } 

    public int DomainId { get; set; } 

    public IEnumerable<Domain> Domains { get; set; } 
} 

Мой валидатор класс:

public class ServicesViewModelValidator : AbstractValidator<ServicesViewModel> 
{ 
    public ServicesViewModelValidator() 
    { 
      RuleFor(x => x.ComponentTypeId) 
       .NotNull() 
       .WithMessage("Required"); 

      RuleFor(x => x.DomainId) 
       .NotNull() 
       .WithMessage("Required"); 
    } 
} 

Мой метод HTTP Post действия:

[HttpPost] 
public ActionResult Services(ServicesViewModel viewModel) 
{ 
    Check.Argument.IsNotNull(viewModel, "viewModel"); 

    if (!ModelState.IsValid) 
    { 
      viewModel.ComponentTypes = componentTypeRepository.FindAll(); 
      viewModel.Domains = domainRepository.FindAll(); 

      return View(viewModel); 
    } 

    return View(viewModel); 
} 

Как я могу получить его, чтобы показать мое нужное сообщение, когда не выбрано ничего?

ответ

0

Я думаю, проблема заключается в том, что вы используете int для ComponentId вместо нулевого int. Затем вы используете валидатор NotNull(), который никогда не будет срабатывать, поскольку int не может быть нулевым.

Попробуйте переключить его на это:

[Validator(typeof(ServicesViewModelValidator))] 
public class ServicesViewModel 
{ 
    public int? ComponentTypeId { get; set; } 

    public IEnumerable<ComponentType> ComponentTypes { get; set; } 

    public int DomainId { get; set; } 

    public IEnumerable<Domain> Domains { get; set; } 
} 

Если доза не работает, то вы можете попробовать использовать валидацию диапазон:

public class ServicesViewModelValidator : AbstractValidator<ServicesViewModel> 
{ 
    public ServicesViewModelValidator() 
    { 
      RuleFor(x => x.ComponentTypeId) 
       .InclusiveBetween(1, int.MaxValue) 
       .WithMessage("Required"); 

      RuleFor(x => x.DomainId) 
       .NotNull() 
       .WithMessage("Required"); 
    } 
} 

Что бы сделать это так, что 0 не является допустимым стоимость.

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