2016-07-29 6 views
0

MVCで。RazorでLambdaのSelectList値を表示できません。

RazorにdropDownListを表示しようとすると、このエラーメッセージが表示されます。

DataBinding: 'System.Int32'に 'BranchId'という名前のプロパティが含まれていません。ウォッチウィンドウで

私は1つのレコードが、私はモデルクラスのSelectListへの参照を持っていないBranchIdBranchName を含むデータベースから返されている見ることができています。 Create.cshtml

@Html.DropDownList("Branch", new SelectList(ViewBag.Branch, "BranchID", "BranchName"), htmlAttributes: new { @class = "form-control" }) 

Controllerクラスで

var list = new SelectList(db.Branchs.Where(branches => !db.CompanyBranches 
    .Any(d => d.BranchId == branches.BranchId)) 
    .Select(branches => branches.BranchId).ToList(), 
    "BranchId", "BranchNumber"); 
ViewBag.Branch = new SelectList(list); 

あなたが今 提案されているようスティーブン

おかげで私は私のCompanyBranchesControllerでラムダ式を変更 var list = db.Branchs.Where(ブランチ=>!db.C ompanyBranches .Any(d => d.BranchId == branches.BranchId)) .Select(b => new {BranchId = b.BranchId、BranchName = b.BranchName})ToList();ドロップダウンリストのため

Create.cshtmlがHtml.DropDownList @ ある( "分岐"、IEnumerableをとしてViewBag.Branch、htmlAttributes:新しい{@class = "フォームコントロール"})

結果でドロップダウンリストが {BranchId = 5、BranchNumber = Br0003}

あるI)が(=新しいリストCompanyBranchController リストアイテムに追加するなど、それを果たしています。 foreach(リスト内のvar i) { SelectListItem s = new SelectListItem(); s.Text = i.BranchName.ToString(); s.Value = i.BranchId.ToString(); items.Add(s);

異なる剃刀の表現を試みるが、成功しない。

私は間違っていますか?あなたのコードのこの部分で

答えて

1

ルック(SelectListのコンストラクタ

Select(branches => branches.BranchId).ToList() 

あなたがbranchIdの選択されています。したがって、基本的に整数のリストをSelectListコンストラクタに渡しています。しかし、BranchIdがデータ値フィールドであると指定します。しかし、整数にはそのようなプロパティはありません。

だから、

Select(b => new { BranchId = b.BranchId, BranchNumber = b.BranchId).ToList() 

はまた、あなたがViewBagに割り当てるときに、再び別のSelectListのを作成する必要はありません。この性質を有するAnnonymousのタイプにあなたの選択を変更する必要があります。だから、これは

ViewBag.Branch = list; 

とあなたのビューで、

@Html.DropDownList("Branch", ViewBag.Branch as IEnumerable<SelectListItem>, 
             htmlAttributes: new { @class = "form-control" }) 

あるいは簡単に十分です、あなたは単にSelectListItem

var list= db.Branchs.Where(// Put your where clause here) 
      .Select(branches => new SelectListItem { Value = branches.BranchId.ToString(), 
             Text = branches.BranchId.ToString()}).ToList(); 
ViewBag.Branch = list; 
+0

感謝 – Paul

0

あなたのコードのリストにあなたの項目を変換することができますCompanyBranchContollerで追加した点を除いて正確です。

リストアイテム=新しいリスト(); foreach(リスト内のvar i) { SelectListItem s = new SelectListItem(); s.Text = i.BranchName.ToString(); s.Value = i.BranchId.ToString(); items.Add(s);
}

ViewBag.Branch = items;

次にCreate.cshtmlクラスで、ドロップダウンリストへの参照を提案した内容に変更しました@ Html.DropDownList( "Branch"、ViewBag.BranchをIEnumerable、htmlAttributes:new {@class = "form-control "})

あなたの助けのすべてのおかげでスティーブン

ポール

お返事スティーブン用
関連する問題