Можно ли использовать этот помощник с парой ключ / значение, установленной в переменной ViewBag?
Абсолютно нет. Если вы хотите использовать строго типизированные помощники, такие как Html.DropDownList, вам нужна модель представления. И так как я всегда рекомендую использовать модель представления, вот пример:
public class MyViewModel
{
public string SelectedId { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
Как видно из этого примера модели представления, для каждого раскрывающегося списка необходимо 2 свойства: скалярное свойство, которое будет содержать выбранное значение, и коллекция SelectListItem
, в которой будут храниться параметры, где каждый параметр состоит из значения и текст.
Тогда контроллер обязан инициализировать эту модель представления и передать ее в представление:
public ActionResult Index()
{
var model = new MyViewModel();
// normally those values will be dynamic. They will be mapped
// to the view model
model.Items = new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
};
return View(model);
}
и тогда у вас будет соответствующее строго типизированное представление для этой модели представления, в котором вы сможете использовать строго типизированную версию помощников:
@model MyViewModel
@Html.DropDownListFor(x => x.SelectedId, Model.Items)
Следующее предложение из вашего вопроса заслуживает некоторого внимания:
Я передаю модель в мое представление (.net mvc 3), которая не может содержать
информация, которую я хочу использовать для заполнения моего раскрывающегося списка.
Вы не должны передавать модель в представление. Вы должны передать модель представления. Модель представления - это класс, который вы специально определяете для каждого представления. Он будет содержать необходимую информацию, которая потребуется для этого представления. Таким образом, модель одного представления может быть составлена из нескольких моделей просто потому, что таковы требования вашего представления.