如何使用DropDownListFor

时间:2012-04-02 07:23:19

标签: asp.net-mvc-3

我想将Drop Down List html控件添加到网页中,并将其填入产品列表中。我的Action控制器看起来像

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

产品型号(Linq to SQL,下面是部分类,其中SelectedId用于下拉选择ID)

public partial class Product
{

    public int SelectedId { get; set; }
}

视图是

@model IQueryable<Entity.Product>


@Html.DropDownListFor(.....)

我不明白如何使用Products填充DropDownList,如果选择了产品将Id绑定到SelectedId属性。

4 个答案:

答案 0 :(得分:4)

你可以像这样实现这个

在你的模型中你需要这样的东西

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"))

可以找到更多信息on this site here

答案 1 :(得分:0)

定义视图模型:

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")
)

其中ProductIdProductName显然是Product域模型的2个属性,用于分别绑定下拉列表中每个<option>的值和文本

答案 2 :(得分:0)

下面是使用HTML下拉列表的语法

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

使用此选项用产品填充DropDownList。

另外,对于所有其他疑问,请参阅this link

答案 3 :(得分:0)

1)创建将按以下方式返回SelecteListItem的IEnumerbale列表的函数

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--")

在上面,Id是Model的项目,您将用它来绑定此视图,它会考虑值项目来存储数据,而“--Select--用于默认值。