none
Проблема с Html.CheckBoxFor в ASP.MVC приложении RRS feed

  • Общие обсуждения

  • Здравствуйте.

    У меня странная проблема возникла с Html.CheckBoxFor.

    В модели есть свойство:

            [Display(Name = "Компания")]
            public bool IsCompany { get; set; }


    Во вьюхе:

    @Html.CheckBoxFor(model => model.IsCompany)

    На html страничке при этом генерируется такой код:

    <input name="IsCompany" id="IsCompany" type="checkbox" value="true" data-val-required="Требуется поле Компания." data-val="true">
    <input name="IsCompany" type="hidden" value="false">

    При отправке формы, если чекбокс отмечен, ModelState.IsValid = true и получаю такое сообщение об ошибке: "Требуется поле Компания".

    Чтобы убрать установенный по умолчанию атрибут [Required], добавил в Global.asax такую строчку:

    DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

    Но это не решило мою проблему, а сообщение об ошибке изменилось на "A value is required."

    Заменил во вьюхе CheckBoxFor на input, все работает, следовательно проблема изза дополнителнього хайдена:

    <input id="IsCompany" name="IsCompany" value="True" type="checkbox" @(Model.IsCompany ? "checked='checked'" : "")/>

    Как решить эту проблему с CheckBoxFor, если я не могу изменять и добавлять свойства в модели?

    Спасибо.

    27 ноября 2013 г. 16:01

Все ответы

  • Посмотрите данный топик, где описана причина такого поведения. А в целом ваш вариант неплохой, лично мы все эти хелперы не используем.

    Сделаем содержимое сообщества лучше, вместе!

    27 ноября 2013 г. 19:40
    Модератор
  • Спасибо за ответ.

    По данной ссылке нету описания именно моей проблемы.  Что делать со свойством типа string я знаю. Хотелось бы найти красивое решение для свойства типа bool и bool?.

    Если вы не используете хелперы, зачем тратите много времени на html и как решаете проблему с валидацией? Чисто клиентскую валидацию используете?

    27 ноября 2013 г. 21:42
  • "По данной ссылке нету описания именно моей проблемы.  Что делать со свойством типа string я знаю. Хотелось бы найти красивое решение для свойства типа bool и bool?." - тогда получается я не совсем понял вас. Какая версия у вас MVC? Приведите простой пример с описанием вашей проблемы, чтобы можно было воспроизвести у себя.

    "Если вы не используете хелперы, зачем тратите много времени на html и как решаете проблему с валидацией?" - в сценариях где мы не используем нужен полный контроль над разметкой. Тоже самое и в Web Forms. Просто ривыкаешь и всё. Но я не говорю не использовать их совсем.

    "Чисто клиентскую валидацию используете?" - и клиентскую и серверную. Просто для простых приложений, то что из коробки можно использовать. А в сложных случаях приходится использовать свои валидаторы (клиентские и серверные), а также собственную реализацию привязки модели.


    Сделаем содержимое сообщества лучше, вместе!

    28 ноября 2013 г. 6:09
    Модератор
  • MVC4 у меня. Проблему я описал в самом начале: в модели булевое свойство, в разметке CheckBoxFor внутри формы. Если чекбокс отметить то при отправке формы ModelState - не валидный, сообщение об ошибке приведено выше.

    28 ноября 2013 г. 11:17
  • Я поэтому и спросил, что у меня ошибка не воспроизводится.

    Сделаем содержимое сообщества лучше, вместе!

    28 ноября 2013 г. 11:23
    Модератор