MVC 2 Проверка CheckBox на стороне клиента - PullRequest
1 голос
/ 06 сентября 2010

это, вероятно, просто, но сводит меня с ума. Я искал повсюду это и нашел людей, которые упомянули об этом, но не нашли решения.

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

Public Property AcceptSurvey As Boolean

У меня есть представление, строго привязанное к этой модели, которое отлично работает с проверкой сервера (т. Е. Все остальные проверки работают нормально, а AcceptSurvey является необязательным).

<%: Html.CheckBoxFor(Function(x) x.AcceptSurvey)%>

Когда я включаю проверку на стороне клиента, при отправке формы (AcceptSurvey не проверяется) я получаю сообщение «Поле AcceptSurvey обязательно». Я предполагаю, что это потому, что проверка видит значение (true) только тогда, когда флажок установлен. Я понимаю, что помощник CheckBoxFor отображает скрытое поле (тот же атрибут name и значение false), и подумал, что это должно с этим бороться.

Если я сделаю свойство обнуляемым, я не смогу использовать CheckBoxFor, я смогу использовать EditorFor, но он будет отображаться как выпадающий список с тремя свойствами (не то, что я хочу), и проверка на стороне клиента работает нормально.

Я что, глупый? Кстати, я использую MVC JQuery для клиентской стороны.

1 Ответ

1 голос
/ 10 октября 2010

Я не знаю, насколько это хороший ответ, но он сработал для меня.

Я использую MVC 2.0 и поэтому создал общие шаблоны Display & Editor для типа данных Boolean.Я показываю логические значения как раскрывающийся список с двумя вариантами вместо флажка.

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

/ Views / Shared / EditorTemplates / Boolean.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %>
<%
    var items = new List<SelectListItem>();
    items.Add(new SelectListItem(){
            Text = @"No",
            Value = @"false",
            Selected = (Model == false)
    });
    items.Add(new SelectListItem(){
            Text = @"Yes",
            Value = @"true",
            Selected = (Model == true)
    });
%>
<%: Html.DropDownList("", items) %>

/ Views / Shared / EditorTemplates / Boolean.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %>
<%: Model ? @"Yes" : @"No" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...