2016-10-20 3 views
0

У меня есть модель Hotel и есть модель HotelPrice в модели.Mvc razor radio button получить значение по умолчанию от модели

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

Вот мой код:

<div> 
@{ 
foreach(var hotelPrice in Model.HotelPrices) 
{ 
    <label class="mt-radio-inline> 
     @Html.RadioButtonFor(hotelModel => hotelPrice.breakfastIncluded, "1", new { @checked = (hotelPrice.Breakfast.ToString() == "1") })Yes 
     <span></span> 
    </label> 
    <label class="mt-radio-inline> 
     @Html.RadioButtonFor(hotelModel => hotelPrice.breakfastIncluded, "0", new { @checked = (hotelPrice.Breakfast.ToString() == "0") })No 
     <span></span> 
    </label> 
} 
} 

Когда я показывать мою страницу (я не мог прийти редактирование части, пока), радио-кнопки всех breakfastIncluded Свойства отображается как Unassigned и последняя-х (т.е. она должна быть «Да», но это похоже на «Нет»).

Однако, когда я проверял инструмент «Проверка» браузера, все проверенные свойства переключателей отображаются правильно (т. Е. Если это должно быть «Да», то проверенная радиокнопка верна и «Нет» проверена как ложная) ,

Я новичок в html, и я не мог понять, почему это происходит. Вы можете мне помочь? Заранее спасибо.

+2

У вас есть несколько проблем - вы не можете использовать цикл foreach для привязки элементов управления к коллекции (см. [Этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net -datatable/30094943 # 30094943)). И вы не устанавливаете атрибут 'checked' (' RadioButtonFor() 'будет делать это правильно, когда вы исправляете свое представление (и' checked = "true" или 'checked =" false "или' checked = "ничего" 'все равно - они устанавливают состояние' checked', но поскольку только один может быть проверен, последний из них (и свойство должно быть 'bool', а не' int') –

+1

Важным уроком в MVC Razor является НЕ использовать 'foreach' при переходе через коллекции для создания элементов Form. Всегда используйте, например,' for (var i = 0; i Model. HotelPrices [i], ...) '.Это необходимо для создания имен элементов, которые могут быть использованы привязкой модели при отправке формы. –

+0

Спасибо и @StephenMuecke & @PeterB. Использование вместо foreach изменений положительно (т.е. теперь, по крайней мере, что-то появляется). Я установил проверенную часть радио (просто чтобы увидеть) как «Да» 'new {@checked =" true "}', для «Нет» 'new {@checked =" false "}' Теперь все v alues ​​появляется как «Нет», тогда как они должны отображаться как «Да». @StephenMuecke я не мог понять, как я должен исправлять проверенные части. Также я не мог понять, что вы подразумеваете под словом «последний из них (и свойство должно быть bool, а не int)». Если вы сможете объяснить, я буду признателен. –

ответ

0

Применяя решения в комментариях. Я использовал for вместо foreach, и кажется, что я не должен устанавливать значение checked, так как радиокноты имеют значения.

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