>  > カーメイト(CARMATE) 車内収納 クロスライドシリーズ サポートバー スズキ エブリイワゴン(DA64系)/バモス(HM1/2系)用 NS104

カーメイト(CARMATE) 車内収納 クロスライドシリーズ サポートバー スズキ エブリイワゴン(DA64系)/バモス(HM1/2系)用 NS104

BERINGER AERONALディスク ステン R オレンジ KAWASAKI 297φ 《ベルリンガー K3R-DIOmm》 > Blog 1   |   送料無料![品番HA89][レガリア RC2オデッセイ][H25/11-H28/1][RC2][定員8] Regalia レガリア ティッシュカバーセット
APMLフィルター
<< MVC5 のエラーメッセージ表示 | ASP.NET Web API のバインディング (2) >>

DropDownList への SelectList の渡し方

by WebSurfer 2019年2月25日 14:37

ASP.NET MVC5 の Html ヘルパーの DropDownList および DropDownListFor に表示するデータを、アクションメソッドからビューにどのように渡すかということについて書きます。

上の画像は、先の記事「スキャフォールディング機能」で書いた通りにスキャフォールディング機能を使って自動生成させたコードで、その中の Edit 画面を表示したものです。

SupplierID と CategoryID が Html ヘルパーの DropDownList を使ってドロップダウン形式で表示されるようになっています。上の画像は CategoryID を展開したところで、CategoryName の一覧が表示されています。

スキャフォールディング機能で自動生成されたコードが基本になるでしょうから、それがどうなっているかを書きます。

まずアクションメソッド Edit で SelectList オブジェクトを生成し ViewBag に設定しています。以下のコードの通りです。

public ActionResult Edit(int? id)
{
 NORTHWINDEntities db = new NORTHWINDEntities();
 Products products = db.Products.Find(id);
 ViewBag.CategoryID = 
 new SelectList(db.Categories, "CategoryID", 
 "CategoryName", products.CategoryID);
 ViewBag.SupplierID = 
 new SelectList(db.Suppliers, "SupplierID", 
 "CompanyName", products.SupplierID);
 return View(products);
}

コンストラクタに SelectList(IEnumerable, String, String, Object) を使って、第 4 引数に selectedValue を設定しているところに注目してください。これによりビューの DropDownList が html に変換された際、select 要素内の当該 option 要素に selected 属性が付与されます。

ビューの DropDownList のコードは以下のようになります。第 1 引数がアクションメソッドで設定した ViewBag のキー名、第 2 引数が null になっているところに注目してください。

@Html.DropDownList("SupplierID", null, 
 htmlAttributes: new { @class = "form-control" })
@Html.DropDownList("CategoryID", null, 
 htmlAttributes: new { @class = "form-control" })

DropDownList の第 2 引数が null となっていますが、第 2 引数の設定に関わらず ViewData / ViewBag から型が IEnumerable<SelectListItem> でキー名が第 1 引数と同じものを探してきます。

(例えば、上記のアクションメソッドで ViewBag.SupplierID の設定を削除すると、ビューの DropDownList のコードで「キー 'SupplierID' を持つ ViewData 項目の型は 'System.Int32' ですが、'IEnumerable<SelectListItem>' でなければなりません」というエラーになります)

DropDownList の第 1 引数を元に ViewBag で渡されたデータ(アクションメソッドで設定された SelectList オブジェクト)を取得するので、上の画像の通りドロップダウン形式で表示できるようになります。さらに、SelectList コンストラクタの第 4 引数に設定した selectedValue によって当該 option 要素に selected 属性が設定された結果が表示されます。

なお、DropDownList の第 2 引数を (SelectList)ViewBag.Supplier としたりすると、SelectList のコンストラクタで第 4 引数に設定した selectedValue が無視されるので注意してください。理由は不明です。

ViewData / ViewBag に DropDownList の第 1 引数と同じキー名がない場合は、DropDownList の第 2 引数の設定が有効になるようです。例えば 、

カーメイト(CARMATE) 車内収納 クロスライドシリーズ サポートバー スズキ エブリイワゴン(DA64系)/バモス(HM1/2系)用 NS104

ツバキ チェーン Tsubaki Chain kit YAMAHA YZF750R (530 ALPHA Type 2 XRS)【ヨーロッパ直輸入品】 15 43 YZF750R (750) 93-97, HKS ウエストゲートシリーズ GT1000フルタービンキット GT-R R35 11003-AN013 GT1000 FULL TURBINE KIT ターボ【店頭受取対応商品】, ミシュラン Pilot Super Sport K2 サマータイヤ 245/35R20 WEDS WedsSport ウェッズ スポーツ FT-117 ホイールセット 4本 20インチ 20 X 8.5 +45 5穴 112, UPS ZOOMER オープンプライマリー CVTカバー #PCH-001 【ズーマー50】, [Azur アズール] ハンドルカバー いすず(ISUZU) 大型ギガ(H6.12~H19.4) エナメルパール 2HLサイズ(外径約47~48cm) XS54J24A-2HL-003 スキーパンツ キッズ 女の子【Isbjorn Of Sweden Candy Frog POWDER Winter Pant】, ファルケ メンズ 靴下 アンダーウェア firenze cotton socks BROWN, 18金 ピアス 揺れる 【送料無料】片耳ピアスチェーンピアスダイヤモンド ピンクサファイアイエローゴールドk18 ロングピアス ピアスゴールド ダイヤ 18金 贈り物 誕生日プレゼント ギフト ファッション Xmas Christmas, Ageha FUNKOUTS【アゲハ】 バタフライ シルバー リング 11号 ブルートパーズ 指輪 蝶 シルバーアクセサリー シルバー925 FAR-059SV-BT-11, Lブラウス([L]スキッパーネックフラワープリントブラウス)/アンタイトル(UNTITLED) [ENDLESS] エンドレス ブレーキローター E-SLIT (Eスリットローター) リア用 1枚【RX-8 SE3P 03.4~ TYPE-G/E】 本州・北海道は送料無料 沖縄・離島は送料1000円(税別)

カーメイト(CARMATE) 車内収納 クロスライドシリーズ サポートバー スズキ エブリイワゴン(DA64系)/バモス(HM1/2系)用 NS104:[ENDLESS] エンドレス ブレーキローター BASIC (ベーシック) リア用 左右セット【シビック EK3(Vi-RS) EK4 EK5 95.9~】 本州・北海道は送料無料 沖縄・離島は送料1000円(税別) 【USA在庫あり】 ムースレーシング MOOSE RACING シフトペダル 可倒式 94年-13年 KTM スチール 黒 MKT4 HD店

カーメイト(CARMATE) 車内収納 クロスライドシリーズ サポートバー スズキ エブリイワゴン(DA64系)/バモス(HM1/2系)用 NS104.MONZA JAPAN Baker ホイール 1台分 4本セット プラウディア S32/S33A(16インチ 6.5J 5穴 P.C.D114.3 INSET 48 ブラック) KENDA ケンダ KR-201 サマータイヤ 215/45R18 KYOHO 共豊 STEINER FORCED SF-V ホイールセット 4本 18インチ 18 X 7 +53 5穴 114.3

Evotech Performance BMW R 1200 GS エアーインテークガード 2013 - 2016 【USA在庫あり】 パワースタンドレーシング リアセット 可変式ライザーブラケット99年-12年 SV1000、SV650 1623-0203 HD店

、アクションメソッドで ViewBag.SupplierID を ViewBag.Supplier に変更した場合、DropDownList("SupplierID", (SelectList)ViewBag.Supplier, ...) として selected の設定を含めて期待した結果が得られます。

ViewData / ViewBag を探す順序ですが AP ドアハンドルインナーカバー ABS クロームメッキ 入数:1セット(4個) トヨタ カローラ E120系,E130系 2000年08月~2006年10月、検証してみると プリティー製 JADE 250 極 タイプ3 4-2-1 マフラー メッキ、まず最初に ViewData を、それになければ ViewBag を探すという結果になりました。ViewData / ViewBag に同じキー名があると 【割引クーポン配布中】Clazzio/クラッツィオ CLAZZIO Air(エアー) エスティマ ハイブリッド X/AHR20W H18/6~H20/12 7人乗 カラータンベージュ【11PTC0294T】、ViewData のデータが使われます。その際 Rice Rocket AZ-1 フロントバンパー 『フィット』 純正 GE6 GE7 GE8 GE9 GP1 GP4 フロントグリル(クロームメッキタイプ) パーツ ホンダ純正部品 カスタム エアロパーツ FIT オプション アクセサリー 用品、もし ViewData のデータが不正ですと(IEnumerable<SelectListItem> 型でないと)エラーになります。

以上は DropDownListFor を使っても同様です。第 1 引数は model => model.SupplierID のようになりますが、プロパティ名 SupplierID から ViewData / ViewBag を探して設定してくれます。

44dc65e2-8c9f-45ab-aef4-65ebc88fadfa|0|.0

Tags: , ,

MVC

関連するブログ

DetailsView 中の連動 DropDownListGridView や DetailsView などのデータバインドコントロールを使ってレコードの更新や挿入を行う場合、データを DropDownList の一覧から選択してもらうことがあります。 ...GridView 上の DropDownList に ToolTip 注意: 以下の記事の例では、Products テーブルの CategoryID が NULL の場合、および更新の際に NULL を入力する場合の対応は考えていません。NULL 対応は別の記事 ...DropDownList を使って絞込みGridView に表示するレコードを DropDownList を使って絞り込むサンプルです。 以前、実験室 SelectCommand の切り替え にも、2 つの DropDownL...

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Search

{yahoojp}jpprem01-zenjp40-wl-zd-65366