2012-04-02 24 views
3

我想將下拉列表html控件添加到網頁中用產品列表填充它。我的動作控制器看起來像如何使用DropDownListFor

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

產品型號(LINQ到SQL,下面是局部類,其中SelectedId是下拉選擇ID)

public partial class Product 
{ 

    public int SelectedId { get; set; } 
} 

的看法是

@model IQueryable<Entity.Product> 


@Html.DropDownListFor(.....) 

什麼我不明白如何填充DropDownList與產品,如果產品選擇綁定到SelectedId屬性Id。

回答

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

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>下拉列表中的值和文本。下面

+0

我應該爲DropDownList創建新模型還是可以添加'public IEnumerable Products {get;組; }'部分產品類並使用產品類來代替?兩者都可以工作,但我不知道哪種設計更好。 – Tomas 2012-04-02 07:34:45

+0

@Tomas,創建一個新班級。 – 2012-04-02 07:35:28

0

是使用HTML下拉列表

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

使用此,以填補你的產品的DropDownList的語法。

同樣對於所有其他疑問,請參考this link

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是模型的項目,你將用它來綁定這個視圖,它考慮值項目來存儲數據和「 - 選擇 - 用於默認值。