Как создать валидатор ASP.NET MVC3 для минимального и максимального количества флажков? - PullRequest
4 голосов
/ 29 марта 2011

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

Этот вопрос кажется хорошим началомна клиентском адаптере, но как связать все это для проверки на сервере?

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Вот как вы можете начать хотя бы для проверки на стороне сервера.Вот очень хорошая статья , которая иллюстрирует несколько концепций.

Атрибут проверки:

public class CheckBoxesValidationAttribute : ValidationAttribute
{
    public CheckBoxesValidationAttribute (int min, int max)
    {
        Min = min;
        Max = max;
    }

    public int Min { get; private set; }
    public int Max { get; private set; }

    public override bool IsValid(object value)
    {
        var values = value as IEnumerable<bool>;
        if (values != null)
        {
            var nbChecked = values.Where(x => x == true).Count();
            return Min <= nbChecked && nbChecked <= Max;
        }
        return base.IsValid(value);
    }
}

Модель:

public class MyViewModel
{
    [CheckBoxesValidation(1, 2, ErrorMessage = "Please select at least one and at most 2 checkboxes")]
    public IEnumerable<bool> Values { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Values = new[] { true, false, true, false }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

Просмотр (~ / Views / Home / Index.cshtml):

@Html.ValidationSummary()
@using (Html.BeginForm()) 
{
    @Html.EditorFor(x => x.Values)
    <input type="submit" value="OK" />
}

Шаблон редактора (~/Views/Home/EditorTemplates/bool.cshtml):

@model bool
@Html.CheckBoxFor(x => x)
1 голос
/ 29 марта 2011

Брэд Уилсон провел отличную презентацию на mvcConf о валидации в mvc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...