Как использовать DropDownListFor - PullRequest
3 голосов
/ 02 апреля 2012

Я хочу добавить HTML-элемент Drop Down List на веб-страницу и заполнить его списком товаров. Мой контроллер действий выглядит как

public ActionResult Index()
{
    return View(_repository.GetProducts(true));
}

Модель продукта (Linq to SQL, ниже приведен частичный класс, где SelectedId для раскрывающегося идентификатора выбора)

public partial class Product
{

    public int SelectedId { get; set; }
}

Представление

@model IQueryable<Entity.Product>


@Html.DropDownListFor(.....)

Что я не понимаю, как заполнить DropDownList продуктами и, если выбран продукт, привязать Id к свойству SelectedId.

Ответы [ 4 ]

4 голосов
/ 02 апреля 2012

Вы можете реализовать это так:

В вашей модели вам нужно что-то вроде этого

public class TestViewModel
{
    public int IdSelected { get; set; }
    public IEnumerable<Person> People { get; set; }
}

В вашем контроллере вам нужно что-то вроде этого

public ActionResult Index()
{
    var people = new List<Person>
    {
        new Person {Id = 1, Name = "krystan"},
        new Person {Id = 2, Name = "Bobby"}
    };

    var theModel = new TestViewModel
    {
        People = people.Select(x => new Person
        {
            Id = x.Id,
            Name = x.Name
        })
    };

    return View(theModel);
}

Тогдав вашем html (и это немного варьируется в зависимости от используемого движка представления, но давайте предположим, что бритва) вам нужно что-то вроде этого

@model MvcApplication3.Models.TestViewModel
@Html.DropDownListFor(x=>x.IdSelected, new SelectList(Model.People, "Id", "Name"))

Более подробную информацию можно найти на этом сайте здесь

0 голосов
/ 02 апреля 2012

1) Создать функцию, которая будет возвращать IEnumerbale список SelecteListItem, как указано ниже

public IEnumerable<SelectListItem> GetProducts()
{
List<Product> ProductList = new List<Product>();

//Here linq query to fetch products

    return ProductList.Select(c => new SelectListItem
              {
                  Value = c.Id,
                  Text = c.ProductName //Or whatever you want to display
              });
}

2) Сохранить в Viewbag в методах контроллера

public ActionResult Index()
{
    ViewBag.ProductList = GetProducts()
    return View();
}

3) Привязать его к целипредставленный ниже

@Html.DropDownList("Id", (IEnumerable<SelectListItem>)ViewBag.ProductList, "--Select--")

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

0 голосов
/ 02 апреля 2012

ниже приведен синтаксис использования раскрывающегося списка HTML

@Html.DropDownList(
string name,
IEnumerable<SelectListItem> selectList,
string optionLabel,
object htmlAttributes) 

Используйте это, чтобы заполнить свой DropDownList продуктами.

Также для всех других сомнений, обратитесь эту ссылку

0 голосов
/ 02 апреля 2012

Определить модель вида:

public class MyViewModel
{
    public int SelectedId { get; set; }
    public IEnumerable<Product> Products { get; set; }
}

Попросите действия вашего контроллера заполнить эту модель представления:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        Products = _repository.GetProducts(true)
    }
    return View(model);
}

и, по вашему мнению, используйте модель представления для создания раскрывающегося списка:

@model MyViewModel

@Html.DropDownListFor(
    x => x.SelectedId, 
    new SelectList(Model.Products, "ProductId", "ProductName")
)

где ProductId и ProductName - это, очевидно, 2 свойства вашей доменной модели Product, которые будут использоваться для соответствующей привязки значения и текста каждого <option> в раскрывающемся списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...