У меня есть класс с именем «PropertyFeature», который просто содержит PropertyFeatureID и Description. Это правильная модель, созданная с помощью LINQ to SQL, сопоставленная с таблицей базы данных SQL Server. Пример экземпляра / строки будет:
PropertyFeatureID: 2
Description: "Swimming Pool"
Количество строк (PropertyFeatures) может, конечно, увеличиваться и уменьшаться, поэтому я хочу динамически отображать список флажков, чтобы пользователь мог выбрать любой из них.
Я могу достаточно легко динамически визуализировать флажки, например:
<%foreach (var Feature in (ViewData["Features"] as IEnumerable<MySolution.Models.PropertyFeature>)) { %>
<%=Html.CheckBox("Features", new { @id = Feature.PropertyFeatureID, @value = Feature.PropertyFeatureID })%><label for="Feature<%=Feature.PropertyFeatureID%>"><%=Feature.Description%></label>
<%}%>
Я указываю идентификатор для каждого флажка и отображаю соответствующую метку, чтобы пользователь мог интуитивно щелкнуть метку и переключить флажок - это прекрасно работает.
Я установил для «CheckBox» «name» значение «Features», чтобы все флажки отображались с одним и тем же именем, и связыватель моделей MVC объединяет их в одну коллекцию под названием «Features» при публикации формы. Это хорошо работает.
После отправки формы я использую отмеченные значения и сохраняю их, поэтому мне нужны фактические целочисленные значения, чтобы я знал, какая именно PropertyFeature выбрана, а не просто куча логических значений и имен полей. Поэтому в идеале я хочу, чтобы это был массив или коллекция, с которыми легко работать.
Я могу получить выбранные значения из моего метода Controller при нажатии кнопки, потому что я указал параметр как int [] Features.
Но проблема в том, что он не поддерживает состояние. То есть, когда я нажимаю кнопку отправки и страница перезагружается (с вновь отображенной формой), я хочу, чтобы все динамические флажки сохранили свой отмеченный статус (или нет). Все остальные поля, которые я создал с помощью Html.DropDownList
и Html.TextBox
, успешно сохраняют свои состояния без проблем на одной странице в той же форме.
Я часами читал все другие темы и статьи по аналогичным вопросам, и много говорят об использовании ICollection
и IDictionary
для объединения вещей и включения логического значения для каждого элемента, чтобы он мог поддерживать состояние флажка. Но я не на 100% понимаю, как использовать это в контексте моего личного примера. Я хотел бы сделать решение по-настоящему простым и не кодировать страницы новых классов только для того, чтобы поддерживать свое состояние флажка.
Какой самый чистый и правильный способ сделать это?