Пользовательский валидатор в поле списка не работает вообще - PullRequest
1 голос
/ 17 декабря 2011

Модель:

using System.ComponentModel.DataAnnotations;
using MySite.Validators;

namespace MySite.Models
{
    public class AddItem
    {
        [Required(ErrorMessage = "Name is required")]
        public string Name { get; set; }

        [TagValidation(ErrorMessage = "At least one tag is required")]
        public virtual List<int> Tags { get; set; }
    }
}

Вид:

@using (Html.BeginForm()) {
    ...
    <div class="editor-label">
        @Html.LabelFor(model => model.Tags, "Tags")
    </div>
    <div class="editor-field">
        @Html.ListBox("Tags")
        @Html.ValidationMessageFor(model => model.Tags)
    </div>
    ...
}

Validator:

using System.ComponentModel.DataAnnotations;

namespace MySite.Validators
{
    public class TagValidationAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            return false;
        }
    }
}

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

Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 22 июня 2012

Я прокомментировал проверку if (ModelState.IsValid == false) в моем контроллере, поэтому я не получил никакой проверки.Первоначально я сделал это потому, что получал ошибку, когда пытался передать модель обратно в представление, поскольку поле ListBox в представлении ожидало IEnumerable, а не List.

Вот какЯ исправил обе проблемы (в контроллере):

[HttpPost]
public ActionResult AddItem(AddItem AddItem)
{
    if (ModelState.IsValid == false)
    {
        ModelState.AddModelError("", "Model not valid.");

        List<Tag> Tags = Db.Tags.ToList();

        ViewBag.Tags = new SelectList(Tags, "TagId", "Name");

        return View(AddItem);
    }

    //...
}
0 голосов
/ 17 декабря 2011

Чтобы получить пользовательскую проверку на стороне клиента, вы должны реализовать ее в JQuery, и я предполагаю, что вы используете ненавязчивую проверку ASP.net MVC 3.

http://thepursuitofalife.com/asp-net-mvc-3-unobtrusive-javascript-validation-with-custom-validators/

...