2012-05-17 2 views
3

У меня возникла проблема с помощью помощника RadioButtonFor. Когда значение передано в true, оно не отображает «проверку» в любом переключателе. Когда значение ложно, оно работает отлично.Использование Html.RadioButtonFor с булевым не записывается Проверено = "Проверено"

Я скопировал этот код из проекта, над которым я работаю, и создал образец приложения, и я смог воспроизвести проблему. Если я жестко закодировал значение true или false, это работает, но когда я использую «! String.IsNullOrEmpty (allgroups)», это не так.

С Вид:

<div> 
    @Html.RadioButtonFor(m => m.AllGroups, true) All Groups 
    @Html.RadioButtonFor(m => m.AllGroups, false) Current Groups 
</div> 

От ViewModel:

public bool AllGroups { get; set; } 

От контроллера:

public ActionResult Index(string allgroups) 
{ 
    var model = new ProgramGroupIndexViewModel 
     { 
      AllGroups = !string.IsNullOrEmpty(allgroups) 
     }; 
    return View(model); 
} 

От источника просмотра в IE:

<div> 
    <input id="AllGroups" name="AllGroups" type="radio" value="True" /> All Groups 
    <input id="AllGroups" name="AllGroups" type="radio" value="False" /> Current Groups 
</div> 

От источника зрения, когда значение AllGroups является ложным (обратите внимание, это работает):

<div> 
    <input id="AllGroups" name="AllGroups" type="radio" value="True" /> All Groups 
    <input checked="checked" id="AllGroups" name="AllGroups" type="radio" value="False" /> Current Groups 
</div> 

ответ

2

Эта модель связывания путаться, потому что вы назвали ваши действия параметр тот же, что и свойство модели. Измените имя параметра Index, и оно должно работать.

public ActionResult Index(string showAllGroups) 
{ 
    var model = new ProgramGroup 
        { 
         AllGroups = !string.IsNullOrEmpty(showAllGroups); 
        }; 
    return View(model); 
} 
-1

если вы возвращаете логическое значение из модели, то нет необходимости проверять отмените явно MVC будет делать это сам просто написать

<div> 
    @Html.RadioButtonFor(m => m.AllGroups) 
    @Html.RadioButtonFor(m => m.AllGroups) 
</div> 

однако, если вы хотите сделать это в явном виде, то

вы должны использовать следующий синтаксис для включения/выключения

Html.RadioButtonFor(m => m.AllGroups, "DisplayText", new { @checked = "checked" }) 

В исходном коде вы можете увидеть, что он устанавливает истина/ложь для значения не установлен атрибут

по вашему мнению, вы можете написать

@if(m.AllGroups) 
{ 
    Html.RadioButtonFor(m => m.AllGroups, "DisplayText", new { @checked = "checked" }) 
} 
else 
{ 
    Html.RadioButtonFor(m => m.AllGroups, "DisplayText" }) 
} 
+0

@ Html.RadioButtonFor (m => m.AllGroups) - это ошибка «Невозможно разрешить метод». – Dean

+0

Согласен, не работает. – mbp

Смежные вопросы