2016-08-30 3 views
0

私はビューレンダリングするために、次のいる:Razor:IEnumerable <string> ViewBagプロパティからドロップダウンを作成するには?

public ActionResult CreateAlta() 
     { 
      ViewBag.RolesApp = new SQLRolerecord().GetAllRolesInApp(); 
      return View(); 
     } 

ViewBagプロパティRolesAppからドロップダウンメニューを生成することができますどのように? GetAllRolesInApp()IEnumerable<string>を返し、私の試みは以下の通りです:

<div class="form-group"> 
    <label class="col-sm-2 control-label">Role: </label> 
      <div class="col-sm-4"> 
      @Html.DropDownListFor("iroleeid", ViewBag.RolesApp, "--Select Role of User--"); 
      </div> 
</div> 

しかしこれはDropDownListForがHtmlHelperの中に存在しないというエラーを生成します。

ありがとうございます。

+0

あなたはIENumerableをSelectListに変換できます。あなたのロールモデルはどのように見えますか? IDと名前? – Max

+0

'string'の代わりに' SelectList'を使うのですか? My RoleモデルはAppRoleです。これはIdentityフレームワークのIdentityRoleクラスに基づいています。 – ITWorker

+0

はい、SelectListItemにTextとValueが含まれ、表示する文字列を 'Text'プロパティに格納すると、複数のSelectListItemを区別するために' Value'に一意の値を格納できます。 – Max

答えて

2

あなたはあなたのビューで、あなたはDropDownListヘルパーメソッドを使用することができます今SelectListItem

var roles = new SQLRolerecord().GetAllRolesInApp() 
           .Select(f=>new SelectListItem { Value=f, Text = f}).ToList(); 
ViewBag.Roles= roles ; 

のリストに文字列のリストを変換することができます。

@Html.DropDownList("Roles") 

これは"Roles"に設定nameidプロパティ値をselect要素を生成します。これらの名前を別の名前にしたい場合は、このオーバーロードを使用します。

@Html.DropDownList("SelectedRole",ViewBag.Roles as List<SelectListItem>) 

これは、我々は同じ文字列値に値とSelectListItemオブジェクトのTextを設定しているので、あなたのselect要素のオプション値とテキストがなる"SelectedRole"

に設定した名前とIDプロパティ値を持つドロップダウンリストを作成します。同じ

+0

これを試してみますと、 'キー' SelectedRole 'を持つタイプ' IEnumerable 'のViewDataアイテムがありません。 'ページを読み込むとき。 – ITWorker

+0

それは不可能です! **第2パラメータ**をお持ちですか? 2番目のパラメータは明示的にオプション項目を指定します – Shyju

+1

気にしないでください。私は物事をコピーしたとき、ViewBagプロパティの名前を使いこなしました。私のコードでは、RolesAppと呼ばれていたからです。返信いただきありがとうございます。これは有効な回答です。 – ITWorker

2

DropDownListForを使用しようとしていますが、ビューモデルとそのプロパティをラムダを使用して接続する必要があります。私はあなたのIENumerable<Role>SelectListに変換DropDownList

@Html.DropDownList("iroleeid", 
       new SelectList(ViewBag.RolesApp), 
       "--Select Role of User--", 
       new { @class = "form-control" }) 
+0

ありがとう、これはあまりにも機能しました。 – ITWorker

1

を探していると思います。

コントローラー:

var selectList = new SqlRoleRecord().GetAllRolesInApp().Select(x => new SelectListItem { Value = x.Id, Text = x.Name }).ToList(); 
ViewBag.RolesApp = selectList; 

ビュー:

@Html.DropDownListFor(x => x.SelectedRoleId, ViewBag.RolesApp, Model.SelectedRoleId) 

オプション:

あなたのモデルにSelectedRoleIdを保存するためのプロパティを追加すると、あなたが後でそれを使用することができますあなたのコントローラーで。たとえば、データベース内のユーザーにロールをバインドする必要がある場合などに便利です。


P.S. 100%働いているかどうかは分かりませんが、現時点ではコンパイルできません。

+0

私はこれを試しましたが、文字列にIdまたはNameの定義が含まれていないというエラーが表示されました。これは、GetAllRolesInAppがモデルのリストではなく、文字列のリストを返すためです。 – ITWorker

+1

@ITWorker IDと名前は例です。ロールからテキストと値として対応する値を設定する必要があります。文字列のリストしかない場合は、 'Value = x.Id、'を削除することができます。 – Max

+0

ありがとう、私は今参照してください。 – ITWorker

関連する問題