Поддерживать состояние динамического списка флажков в ASP.NET MVC
У меня есть класс с именем «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 как «Возможности», чтобы все флажки отображались с одинаковыми именами, и связыватель моделей MVC объединяет их в одну коллекцию под названием «Функции» при публикации формы. Это хорошо работает.
После отправки формы я использую отмеченные значения и сохраняю их, поэтому мне нужны фактические целочисленные значения, чтобы я знал, какая именно PropertyFeature выбрана, а не просто куча логических значений и имен полей. Поэтому в идеале я хочу, чтобы это был массив или коллекция, с которой легко работать.
Я могу извлечь выбранные значения из моего метода Controller при нажатии кнопки, потому что я указал параметр как int [] Features.
Но проблема в том, что он не поддерживает состояние. То есть, когда я нажимаю кнопку отправки и страница перезагружается (с вновь отображенной формой), я хочу, чтобы все динамические флажки сохранили свой отмеченный статус (или нет). Все остальные поля, которые я создал сHtml.DropDownList
а такжеHtml.TextBox
все успешно поддерживают свои состояния без проблем на одной странице в одной форме.
Я провел часы, читая все другие темы и статьи по аналогичным вопросам, и много говорят об использованииICollection
а такжеIDictionary
связать вещи и включить логическое значение для каждого элемента, чтобы он мог поддерживать состояние флажка. Но я не на 100% понимаю, как использовать это в контексте моего личного примера. Я хотел бы, чтобы решение было действительно простым и не нужно было кодировать страницы новых классов просто для того, чтобы поддерживать мое состояние флажка.
Какой самый чистый и правильный способ сделать это?