ASP.NET MVC DropDownListFor с моделью типа Список

У меня есть представление с моделью типа List, и я хочу поместить выпадающий список на странице, содержащий все строки из списка, как элементы в раскрывающемся списке. Я новичок в MVC, как бы я это сделал?

Я попробовал это:

@model List @Html.DropDownListFor(x => x) 

но это породило ошибку. Любая помощь приветствуется.

Чтобы создать раскрывающийся список, вам нужны два свойства:

  1. свойство, к которому вы привязываетесь (обычно это скалярное свойство типа integer или string)
  2. список элементов, содержащих два свойства (один для значений и один для текста)

В вашем случае у вас есть только список строк, которые нельзя использовать для создания раскрывающегося списка.

В то время как для номера 2. вы могли бы иметь значение, а текст – то же самое, что вам нужно свойство для привязки. Вы можете использовать слабо типизированную версию помощника:

 @model List @Html.DropDownList( "Foo", new SelectList( Model.Select(x => new { Value = x, Text = x }), "Value", "Text" ) ) 

где Foo будет именем ddl и использоваться связующим устройством по умолчанию. Таким образом, сгенерированная разметка может выглядеть примерно так:

  

Считается, что более удаленная модель обзора для раскрывающегося списка выглядит следующим образом:

 public class MyListModel { public string SelectedItemId { get; set; } public IEnumerable Items { get; set; } } 

а потом:

 @model MyListModel @Html.DropDownListFor( x => x.SelectedItemId, new SelectList(Model.Items, "Value", "Text") ) 

и если вы хотите предварительно выбрать какой-либо параметр в этом списке, все, что вам нужно сделать, это установить для свойства SelectedItemId этой модели представления соответствующее Value некоторого элемента в коллекции Items .

Если в раскрывающемся списке есть строка типа List, которую вы хотите, я делаю следующее:

 List ShipNames = new List(){"A", "AB", "ABC"}; @Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" }) 

Что дает выпадающий список, например:

  

Чтобы получить значение на пост controllerа; если вы используете модель (например, MyViewModel), которая имеет список строк как свойство, поскольку вы указали x => x.ShipNames, вы просто имеете подпись метода как (потому что она будет сериализована / отменена в рамках модели):

public ActionResult MyActionName (модель MyViewModel)

Если вы просто хотите получить доступ к выпадающему списку на пост, тогда подпись будет:

public ActionResult MyActionName (строка ShipNames)

Interesting Posts
Давайте будем гением компьютера.