использовать Html.DropDownListFor () без использования Model - PullRequest
0 голосов
/ 05 декабря 2011

Я передаю модель в мое представление (.net mvc 3), которая не может содержать информацию, которую я хочу использовать для заполнения моего раскрывающегося списка.

Я никогда не использовал Html.DropDownListFor (), но всегда только что использовал Html.DropDownList ().Я хочу добавить еще один инструмент в свой пакет хитростей и поэтому хочу попробовать включить Html.DropDownListFor ().

Можно ли использовать этот помощник с парой ключ / значение, заданной в переменной ViewBag?

Просьба сообщить, что любые примеры кода будут высоко оценены (как передний (бритва), так и задний (на контроллере)).

TIA

1 Ответ

1 голос
/ 06 декабря 2011

Можно ли использовать этот помощник с парой ключ / значение, установленной в переменной 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), которая не может содержать информация, которую я хочу использовать для заполнения моего раскрывающегося списка.

Вы не должны передавать модель в представление. Вы должны передать модель представления. Модель представления - это класс, который вы специально определяете для каждого представления. Он будет содержать необходимую информацию, которая потребуется для этого представления. Таким образом, модель одного представления может быть составлена ​​из нескольких моделей просто потому, что таковы требования вашего представления.

...