2012-04-02 12 views
3

ドロップダウンリストのhtmlコントロールをWebページに追加して、製品リストに追加します。私のアクションコントローラは、ビューがDropDownListForの使い方

@model IQueryable<Entity.Product> 


@Html.DropDownListFor(.....) 

何ですか

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

製品モデル(LINQ to SQLは、以下のSelectedIdが選択IDドロップダウンのためである部分クラスである)

public partial class Product 
{ 

    public int SelectedId { get; set; } 
} 

のように見えます私はDropDownListをProductsでいっぱいにする方法や、Selected Idプロパティに商品を選択した場合には理解できません。

答えて

4

あなたは、あなたが次にこの

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内(のようなものを必要とし、あなたのコントローラーでこの

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

ようなものが必要あなたのモデルではそう

のようにこれを実装することができますし、これは、使用されているビューエンジンに応じて少し変わりますが、あなたはこのような何かを必要とすると思います)

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

詳しい情報はon this site here

0

は、ビューモデルを定義しています。

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

とあなたのビューでビューを使用します。

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

は、あなたのコントローラのアクションは、このビューモデルを投入持っていますドロップダウンを生成するモデル:

@model MyViewModel 

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

ここで、ProductIdProductNameは明らかにドロップダウンリストの各<option>の値とテキストをバインドするために使用されるProductドメインモデルの2つのプロパティです。

+0

DropDownListの新しいモデルを作成する必要がありますか、または「public IEnumerable Products {get;セット; } 'を部分的なプロダクトクラスに変換し、代わりにプロダクトクラスを使用しますか?どちらも機能しますが、どちらが設計上優れているか分かりません。 – Tomas

+0

@Tomas、新しいクラスを作成します。 –

0

は、以下の製品を使用してDropDownListコントロールを埋めるためにリスト

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

使用このHTMLドロップダウン使用するための構文です。他のすべての疑問についても

this link

0

1を参照してください)

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以下のとおりSelecteListItemのIEnumerbaleリストを返す関数を作成します)Viewbagにで保管し、コントローラのメソッド内

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

3)ターゲットビューで以下のようにバインドします。

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

上記のIDは、このビューをバインドするために使用するモデルのアイテムであり、値アイテムにデータを格納するとみなし、 " - 選択 - はデフォルト値として使用します。