2016-11-21 6 views
1

とMVC 5のasp.net SelectListの、私はビューに渡していますこれはアクションコントローラ内の選択リストです条件

ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == User.Identity.GetUserName()), "UserName", "UserName"); 

<div class="form-group"> 
      @Html.LabelFor(model => model.UserName, "UserName", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("UserName", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

、それはERROを働いていません。

エンティティへのLINQは方法 ' GetUserName(System.Security.Principal.IIdentity)可能System.String' メソッドを認識しない、とこの メソッドをストア式に変換することはできません。

+2

Linq式の中で関数呼び出し「User.Identity.GetUserName()」を使用することはできません。あなたができることは、まず 'User.Identity.GetUserName()'の値を変数に代入し、その変数をlinq式で使用することです。 –

答えて

1

変更への最初の行:あなたは、クエリを実行して結果を返すためにWhereToList()を追加する必要が

string userName = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == userName).ToList(), "UserName", "UserName"); 

+0

LINQ to Entitiesは、メソッド 'System.String GetUserName(System.Security .Principal.IIdentity) 'メソッドであり、このメソッドをストア式に変換することはできません。 –

+0

最初に変数に 'User.Identity.GetUserName()'を入れて、値があることを確認してください。私は答えをedtitedしました –

+0

ありがとう、私は –

3

GetUserNameを式に変換することはできません。このように試してください

var username = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == username), "UserName", "UserName"); 

さらに、Haithamのように.ToList()を追加してください。

+0

に投票しました。 –

2

linq/lambda式はGetUserName関数を認識しません。 別の変数で読み込み、linq query/lambda式でその変数を使用する必要があります。

var username = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == username), "UserName", "UserName"); 
+0

に投票しました、 –