Привязка MVC к флажку
Я нашел столько вопросов об этом, но ни один из них не перешел или, похоже, не перешел на мой сценарий. У меня есть модель:
public class CheckBoxModel
{
public int Id{ get; set; }
public bool IsSelected { get; set; }
}
В этом случае попробуйте привязать мой IsSelected bool к флажку:
<%= Html.CheckBox("IsSelectedCheck",Model.IsSelected)%>
У меня есть много элементов на странице, все они имеют флажок рядом с ними, все, что я пытаюсь сделать, это передать обратно всем идентификаторам элементов и какие из них были выбраны.
В настоящий момент значение IsSelected всегда ложно. Если Html.CheckBox задает значение Model.IsSelected каждый раз, когда пользователь переключает этот флажок.
Спасибо
Ответы
Ответ 1
Попробуйте вот так:
<%= Html.CheckBoxFor(x => x.IsSelected) %>
Также, если вы хотите пройти по id, не забудьте сделать это:
<%= Html.HiddenFor(x => x.Id) %>
И если у вас есть коллекция из них:
public class MyViewModel
{
public CheckBoxModel[] CheckBoxes { get; set; }
}
вы можете:
<% for (var i = 0; i < Model.CheckBoxes.Length; i++) { %>
<div>
<%= Html.HiddenFor(x => x.CheckBoxes[i].Id) %>
<%= Html.CheckBoxFor(x => x.CheckBoxes[i].IsSelected) %>
</div>
<% } %>
который будет успешно связываться с:
[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
// model.CheckBoxes will contain everything you need here
...
}
Ответ 2
Альтернатива Дарину фантастический ответ
Я определенно рекомендую использовать подход Дарина для возвращающихся классов, которые будут проводиться большую часть времени. Этот вариант является "быстрым" и грязным взломом, если все, что вам нужно, это проверенные идентификаторы:
<% foreach (var cb in Model.CheckBoxes) { %>
<div>
<input type="checkbox"
value="<%= cb.Id %>"
<%= cb.IsSelected ? "checked=\"checked\"" : "" %>
name="ids" />
</div>
<% } %>
Будет привязан к параметру int[] ids
в следующем действии:
[HttpPost]
public ActionResult MyAction(int[] ids)
{
// ids contains only those ids that were selected
...
}
- Преимущество - это чистый html, поскольку скрытый ввод отсутствует.
- Стоимость написания большего количества кода в представлении.
В MVC 4.0 (Razor 2.0) вы можете использовать следующий синтаксис в своем представлении:
<input type="checkbox" value="@cb.Id" checked="@cb.IsSelected" name="ids" />