Не запускайте обязательный валидатор для

У меня есть следующая модель:

public class Model1
{
    [Required(ErrorMessage="E1")]
    public string Name { get; set; }
    [Required(ErrorMessage="E2")]
    [RegularExpression(".+\\@.+\\..+")]
    public string Email { get; set; }
    [Required(ErrorMessage="E3")]
    public bool WillAttend { get; set; }
}

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

    public ActionResult Model1()
    {
        Model1 m = new Model1();
        return View(m);
    }

и просмотр:

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Model1</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.WillAttend, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.WillAttend)
                    @Html.ValidationMessageFor(model => model.WillAttend, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

проблема требуется валидатор для свойства WillAttend не работает. Даже в методе действия ModelState.IsValid имеет значение true. Почему и как сделать WillAttend требуется?


person John    schedule 28.06.2015    source источник
comment
Когда вы ожидаете, что обязательный валидатор сработает? Bool имеет только два возможных значения (True и False), и оба удовлетворяют требованию, чтобы свойство WillAttend имело значение. Посмотрите на вопрос логическое значение True для обязательного атрибута в свойстве MVC .net.   -  person Jens R.    schedule 28.06.2015


Ответы (1)


На данный момент ваш required-attribute просто проверяет, было ли указано значение. Поскольку логическое значение может быть либо истинным, либо ложным, проверка никогда не завершится ошибкой.

Вы можете пометить логическое значение как обнуляемое:

public bool? WillAttend { get; set; }

или вы можете попробовать создать собственный валидатор, если вы пытаетесь заставить их установить флажок, например по этой ссылке.

person Brad C    schedule 28.06.2015