Модель Asp.Net MVC с соответствующими раскрывающимися списками

Я создаю экран в своем приложении C # Asp.Net MVC, в котором есть несколько связанных раскрывающихся списков. Например, я выбираю «Категория», а затем во втором раскрывающемся списке должны отображаться все связанные подкатегории для выбранной категории.

Итак, будет ли модель содержать список, используемый для построения раскрывающегося списка категорий, а затем список, изначально пустой. При выборе категории мне нужно отправить сообщение назад, передав идентификатор выбранной категории, затем заполнить список ‹> подкатегории ... и затем создать раскрывающийся список подкатегорий?

Надеюсь, кто-то может помочь с дизайном моей модели. Модель также будет иметь довольно много данных, не связанных со списком, для редактируемого элемента. И я думаю, что модели также понадобится «CategorySelectedId», чтобы я знал, что было выбрано?


person Craig    schedule 26.01.2011    source источник


Ответы (1)


arrow_upward
1
arrow_downward

Лучше всего использовать для этого AJAX. Вам нужно будет подключить событие change к вашему первому полю выбора, и как только оно будет изменено, вы сделаете запрос AJAX с выбранным значением для некоторого Action. Действие вернет список JSON, который будет проанализирован и помещен в следующий select box.

Обновить

Модель для действия возврата JSON может быть действительно анонимным типом или IEnumerable из SelectListItem. Используйте Linq: `mycollection.select(item=> new SelectListItem() { Name = item.Name, Value = item.ID.ToString() });

Если предположить, что страница выглядит так:

<form>
   <select id="MainCat" name="MainCatID">
      <option value="1">First option</option>
      <option value="2">First option</option>
      <option value="3">First option</option>
   </select>

   <select id="SubCat" name="SubCatID" disabled="disabled">
      <option value=""> -- Please select a main category -- </option>
   </select>
</form>

Ваша модель будет выглядеть так:

public class MyModel {
    public int MainCatID {get;set;}
    public int SubCatID {get;set;}
    public IEnumerable<SelectListItem> MainCats {get;set;}
}

Конечно, вы можете добавить атрибуты проверки и т.д.

person Gideon    schedule 26.01.2011
comment
Thnaks @Gidon - Как будет выглядеть Модель? - person Craig; 26.01.2011
comment
Спасибо @Gidon - мне нужна модель, чтобы также иметь значения для drop mdown, верно? То есть список элементов и их значений для заполнения выпадающего списка? - person Craig; 26.01.2011
comment
Для первого раскрывающегося списка да, вы могли бы. Я добавил его в модель. - person Gideon; 26.01.2011
comment
Спасибо. В разметке, будете ли вы использовать foreach для создания элементов из MainCats? Я делал это, но потом мне сказали, что я не должен использовать foreach в своем представлении... - person Craig; 26.01.2011
comment
В вашем вопросе две части. Как отображать раскрывающийся список основных кошек: в этом случае проще всего использовать Html.DropDownListFor(m=›m.MainCatID, Model.MainCats) - person Gideon; 27.01.2011
comment
Вторая часть: должен ли я использовать циклы foreach, на мой взгляд. Да, конечно. Он используется для создания списка UL или таблицы. И даже если вы хотите иметь больший контроль над своим списком ‹select› (например, распечатать классы CSS для элементов option). С синтаксисом Razor ваш код также будет менее беспорядочным при использовании циклов foreach. - person Gideon; 27.01.2011