Второй аргумент помощника DropDownList
должен быть IEnumerable<SelectListItem>
или SelectList
, который реализует этот интерфейс в этом отношении.Таким образом, в вашем контроллере действия организуются таким образом, что вы преобразуете свою собственную коллекцию в IEnumerable<SelectListItem>
.Как всегда, вы можете начать с написания модели представления:
public class MyViewModel
{
public string SelectedDescription { get; set; }
public SelectList Descriptions { get; set; }
}
, а затем попросить действия вашего контроллера запросить пользовательский список и заполнить модель представления, которая будет передана в представление:
public ActionResult Index()
{
var descriptions = yourCustomCollection.MyCustomClass.Select(x => new
{
Value = x.Description,
Text = x.Description
});
var model = new MyViewModel
{
Descriptions = new SelectList(descriptions, "Value", "Text")
};
return View(model);
}
и, наконец, в вашем строго типизированном виде:
<%= Html.DropDownListFor(x => x.SelectedDescription, Model.Decriptions) %>
ОБНОВЛЕНИЕ:
После публикации обновленных моделей (которые, кстати, все еще не завершены и их невозможно скомпилировать, как у вас есть)не предоставил никаких имен свойств), вот пример:
public class ViewModel
{
public int SelectedId { get; set; }
public Detail Detail { get; set; }
}
public class Detail
{
public CustomClassCollection MyCollection { get; set; }
}
public class CustomClassCollection
{
public List<CustomClass> CustomClass { get; set; }
}
public class CustomClass
{
public int Id { get; set; }
public string Description { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
var vm = new ViewModel
{
Detail = new Detail
{
MyCollection = new CustomClassCollection
{
CustomClass = new List<CustomClass>
{
new CustomClass
{
Id = 1,
Description = "description 1",
},
new CustomClass
{
Id = 2,
Description = "description 2",
},
new CustomClass
{
Id = 3,
Description = "description 3",
},
}
}
}
};
return View(vm);
}
}
и в представлении:
<%= Html.DropDownListFor(
x => x.SelectedId,
new SelectList(Model.Detail.MyCollection.CustomClass, "Id", "Description")
) %>
Что вы должны понимать, чтобы определить раскрывающийся список в ASP.NET MVC, если вам нужно 2 вещи:
- Скалярное свойство для привязки выбранного значения к (
SelectedId
в моем примере) - Коллекция для привязки списка к (
Model.Detail.MyCollection.CustomClass
в примере)