8

Я хочу знать, что является лучшим способом создания dropdownlists в MVC 4? С ViewBag или другой подход?Каков наилучший способ создания dropdownlists в MVC 4?

+0

это не View.Bag это ViewBag –

+1

Я бы порекомендовал вам передать их с помощью 'ViewModel'. – Artless

+0

Хм, у меня есть много dropdownLists в представлении. Я хочу создать их с помощью ViewBag, но не хочу спешить, возможно, есть другие способы, которые лучше, чем viewBag. –

ответ

10

Я бы сказал, что, поскольку элементы являются значениями переменной в вашем представлении, что они принадлежат модели просмотра. Модель просмотра не обязательно только для возвращающихся предметов out вид.

Модель:

public class SomethingModel 
{ 
    public IEnumerable<SelectListItem> DropDownItems { get; set; } 
    public String MySelection { get; set; } 

    public SomethingModel() 
    { 
     DropDownItems = new List<SelectListItem>(); 
    } 
} 

Контроллер:

public ActionResult DoSomething() 
{ 
    var model = new SomethingModel();   
    model.DropDownItems.Add(new SelectListItem { Text = "MyText", Value = "1" }); 
    return View(model) 
} 

Вид:

@Html.DropDownListFor(m => m.MySelection, Model.DropDownItems) 

Populate это в контроллере или везде, где это уместно для сценария.

В качестве альтернативы, для большей гибкости, переключатель public IEnumerable<SelectListItem> для public IEnumerable<MyCustomClass>, а затем сделать:

@Html.DropDownFor(m => m.MySelection, 
    new SelectList(Model.DropDownItems, "KeyProperty", "ValueProperty") 

В этом случае вы также, конечно, должны изменить свои действия контроллера для заполнения model.DropDownItems с экземплярами MyCustomClass вместо ,

+1

Спасибо, @ Ant P. Как я могу получить dataValueField в этом примере? –

+0

Я хочу написать этот новый SelectList (Model.DisplayList, "TestplanId", "Name") –

+1

@ ElvinArzumanoğlu Я добавил некоторую информацию о том, как вы можете это достичь. –