asp.net mvc3 проверка переключателя на основе модели - PullRequest
9 голосов
/ 13 ноября 2011

У меня, казалось бы, легкая задача установить переключатель "проверено" на основе логического значения модели.У меня есть логическое значение в моей модели «IsSDPDonor», которое я хочу использовать для кнопок «Да / Нет».Переключатель «Да» должен быть проверен, если «IsSDPDonor» имеет значение «истина», и переключатель «Нет», если он имеет значение «ложь».Я пытался использовать приведенный ниже код, но он всегда проверял переключатель «Нет».

 @Html.Label("Would You Like to Donate Platelets (SDP)") : 
 @Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, new {@checked = Model.Donor.IsSDPDonor ? "checked" : ""}) Yes 
 @Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, new { @checked = !Model.Donor.IsSDPDonor ? "checked" : "" }) No

Я немного расстроился, поэтому подумал, что лучше взять некоторую помощь.По сути, синтаксис HTML говорит, что для проверки переключателя нужно указывать только атрибут «Проверено» без каких-либо значений.Мне было интересно, как бы я это сделал, используя синтаксис бритвы MVC3.

1 Ответ

13 голосов
/ 13 ноября 2011

Создайте параметры HTML в блоке кода, оставив их пустыми, если кнопку не нужно проверять, затем используйте правильную переменную в вашем помощнике.

@{
    var yesOptions = Model.Donor.IsSDPDonor ? new { @checked = "checked" } : null;
    var noOptions =  Model.Donor.IsSDPDonor ? null : new { @checked = "checked" };
}
@Html.Label("Would You Like to Donate Platelets (SDP)") : 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, yesOptions ) Yes 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, noOptions ) No

РЕДАКТИРОВАТЬ : После просмотра исходного кода мне кажется, что он должен устанавливать это свойство на основе значения модели. Вы пытались полностью пропустить атрибуты HTML?

case InputType.Radio:
    if (!usedModelState) {
        string modelStateValue = htmlHelper.GetModelStateValue(name, typeof(string)) as string;
        if (modelStateValue != null) {
            isChecked = String.Equals(modelStateValue, valueParameter, StringComparison.Ordinal);
            usedModelState = true;
        }
    }
    if (!usedModelState && useViewData) {
        isChecked = htmlHelper.EvalBoolean(name);
    }
    if (isChecked) {
        tagBuilder.MergeAttribute("checked", "checked");
    }
    tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue);
    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...