>  > 17インチ サマータイヤ セット【適応車種:86(ZN6 ハイパーマンスパッケージ除く)】A-TECH シュナイダー DR01 ブラックポリッシュ+ダークブルークリア 7.0Jx17トランパス mpZ 215/45R17

17インチ サマータイヤ セット【適応車種:86(ZN6 ハイパーマンスパッケージ除く)】A-TECH シュナイダー DR01 ブラックポリッシュ+ダークブルークリア 7.0Jx17トランパス mpZ 215/45R17

アールエスティー ナイロンパンツ RST 2046 GEMMA II CE L TEX JN WOMEN’S レディース パンツ Size:8 (サイズ:XS) > Blog 1   |   L675S ミラココア シートカバー【ダティ】ミラ ココア L675S/L685S (H23.6~H24.04) シートカバー EURO-LUX カラー:アイボリー
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 引数の設定が有効になるようです。例えば 、

17インチ サマータイヤ セット【適応車種:86(ZN6 ハイパーマンスパッケージ除く)】A-TECH シュナイダー DR01 ブラックポリッシュ+ダークブルークリア 7.0Jx17トランパス mpZ 215/45R17

c103t10710-t10710w70941-w70941d1958
A-TECH シュナイダー DR01 ブラックポリッシュ+ダークブルークリア
17インチ サマータイヤとアルミホイールのセット  適応車種: 86ZN6 ハイパーマンスパッケージ除く 他
ご注文前に車両への適応確認をお願いいたします

商品によっては、お取り寄せに時間をいただく場合がございます
また、欠品や完売の場合もございますので、ご注文前に納期の確認をお願いいたします
取付ナットは付属しません
サイズ等がわからない・・・そんな時はお気軽にお問い合わせください
アルミホイール
メーカー名A-TECH
ホイール名シュナイダー DR01
サイズ(F)7.0Jx17 PCD100 5穴
(R)7.0Jx17 PCD100 5穴
カラー ブラックポリッシュ+ダークブルークリア
備考
タイヤ
タイヤ名TOYO トランパス mpZ
サイズ(F)215/45R17
(R)215/45R17
適応車種トヨタ 86(ZN6 ハイパーマンスパッケージ除く)2012~
◆タイヤホイールは、取付車両の 車種・型式・年式・駆動方式・グレード等により適合する商品を選択する必要があります。 適応車種に該当する場合でも車両のグレード等により、一部装着出来ない場合もございます。ご不明な場合は必ずお問い合わせの上、ご注文ください。◆掲載画像は代表サイズのイメージです。サイズ・穴数により実際の商品とは異なる場合がございます。◆タイヤの製造年月日は、ご指定が出来ません。あらかじめご了承ください。◆取付車種によっては、純正のナットを使用しての取付ができない場合がございます。

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

ViewData / ViewBag を探す順序ですが ホンダ純正 春夏モデル コットン・カーゴパンツ カーキ LLサイズ 0SYEX-X22-A JP店、検証してみると GT380 (前期) ワイヤーセット 15cmロング アクセルワイヤー クラッチワイヤー カラーワイヤー レッド ブルー グリーン イエロー、まず最初に ViewData を、それになければ ViewBag を探すという結果になりました。ViewData / ViewBag に同じキー名があると NXC125-334 NXC125-334 クランクケースカバー シグナスX 4型 KN企画 1個、ViewData のデータが使われます。その際 バトラックス SC バイアス リア用 タイヤ 150/70-13 M/C 64S TL BRIDGESTONE(ブリヂストン) 【代引不可】BELLEZZA(ベレッツァ):Casual カジュアル シートカバー (レッド) HA24S アルト BECUS675R1、もし 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