Создание DropDownList для элементов в представлении - PullRequest
5 голосов
/ 02 января 2012

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

<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %>

Пожалуйста, предложите.

-Sampat.

Ответы [ 2 ]

6 голосов
/ 02 января 2012

Вы не можете использовать это таким образом.Как следует из названия, он возвращает элемент выбора HTML для каждого свойства объекта, представленного указанным выражением с использованием указанных элементов списка и атрибутов HTML.

Хотя вы можете создать этот объект списка следующим образом: -

@Html.DropDownListFor(model => model.DropDownElement, 
                       new SelectList(model.DropDownElement, "Id", "Name"))

Обновление

Я возьму пример модели страны с парой Id / Name.Подобно следующему

public class Country 
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Теперь, в своем действии контроллера вы можете передать его как список выбора:

public ActionResult YourAction()
{
    YourModel yourModel = new YourModel(); // Just for reference. I suppose you must be passing some model to your view
    ViewBag.DropDownList = new SelectList(db.Countries, "Id", "Name"); // This way you don't need to make any changes with your passing model.
    return View(yourModel);
}

И, наконец, в представлении, вы можете использовать DropDownListFor следующим образом.

@Html.DropDownListFor(model => model.YourModelProperty, 
   (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---") 

В Sidenote, если вы просто хотите отобразить список чисел со значением, вы можете напрямую ввести HTML-код и использовать его вместо использования DropDownListFor.Как и в следующем случае:

<select id="yourModelPropertyName" name="yourModelPropertyName">
   <option value="">---Select Value---</option>
   <option value="1">India</option>
   <option value="2">Australia</option>
   <option value="3">US</option>
   <option value="4">England</option>
   <option value="5">Finland</option>
</select>

Просто убедитесь, что «yourModelPropertyName» является правильным, и оно должно быть тем для свойства, для которого вы хотите его обновить

Подробнее обновление

В представлениях, где вы не хотите показывать выбранное значение, используйте код ниже

<select id="yourModelPropertyName" name="yourModelPropertyName">
   <option selected="selected" value="1">@model.YourDropDownList</option>
   <option value="2">India</option>
   <option value="3">Australia</option>
</select>

Это поможет: -)

1 голос
/ 02 января 2012

@ Панкадж дал вам грубый способ сделать это. Вы также можете передать объект IEnumerable из SelectListItem в объект вашего представления из контроллера и создать элемент select на его основе.

Вот хороший пример:

Способ работы с HTML-элементом выбора (AKA DropDownList) в ASP.NET MVC

Представьте, что ваш контроллер выглядит примерно так:

public ActionResult Index() {

    var products = productRepo.GetAll();

    registerProductCategorySelectListViewBag();
    return View(products);
}

private void registerProductCategorySelectListViewBag() {

    ViewBag.ProductCategorySelectList = 
        productCategoryRepo.GetAll().Select(
            c => new SelectListItem { 
                Text = c.CategoryName,
                Value = c.CategoryId.ToString()
            }
        );
}

на ваш взгляд, DropDownListFor html помощник должен выглядеть примерно так:

@Html.DropDownListFor(m => m.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.ProductCategorySelectList
)
...