2016-11-07 2 views
0

2列、つまりIdNameの値に基づいてドロップダウンリストを作成したいので、名前だけでなく<option value=Id">Name</option>のようにします。linqで2列をフェッチしてドロップダウンリストを作成

私は大丈夫ですので、どのように名前だけを取得することができます

var result = from r in db.Categories 
         select r.Name; 

      ViewBag.Categories = result; 

@Html.DropDownListFor(model => model.Name, new SelectList(ViewBag.Categories), "Select Category") 

をしかし、私はすでに言ったようにIDと名前の両方を持つようにしたいので、私はあることを私のLINQを変更:

var result = from r in db.Categories 
         select new { r.Name, r.Id }; 

しかし、IDと名前の両方でドロップダウンを行う方法がわかりません。

+0

'ViewBag.Categories =新しいSelectListの(db.Categories、 "ID"、 "名前");'とビューで '@ Html.DropDownListFor(M => m.Name、新しい(SelectListの)ViewBag .Categories、 "Select Category") ' –

+0

'(SelectList) 'の下に、現在のコンテキストでは無効な型であることを示す赤い行が表示されます。 – frc

+0

申し訳ありません - それの前に 'new'を削除します –

答えて

0

ActionでカスタムSelectListを作成し、結果を返す前にViewBagに入れることができます。

ViewBag.Categories = new SelectList(db.Categories, "Id", "Name"); 

これはdb.Categoriesに基づいてあなたのためのリストを作成し、textnodeとして「価値」とNameId列の値を入れます。
あなたがtextnodeを変更したい場合は、例えば、カスタムリストを作成する必要があります。:

List<Categorie> temp = db.Categories.ToList(); 
Foreach (var t in temp) 
    t.Name = String.Format("{0} {1}", t.Id, t.Name); 
ViewBag.Categories = new SelectList(temp, "Id", "Name"); 

は、ビューに呼び出すときSelectListのにViewBagを解析することを忘れないでください。

@{ 
SelectList categories = ViewBag.Categories as SelectList; 
} 

@Html.DropDownListFor(model => model.Name, categories) 
関連する問題