2011-08-01 10 views
1

ページが読み込まれるときに正しい値を選択するためのドロップダウンリストを取得しようとしています。DropDownListのasp.netヘルパーが正しくレンダリングされない

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value"), new { @class = "selectbox", selected = Model.CounterpartyType }) 

ただし、ページのレンダリング時には、常にドロップダウンリストの最初の値が選択されます。

Screenshot of the page

ページのHTMLソース:

<select class="selectbox" id="CounterpartyTypeSelect" name="CounterpartyTypeSelect" selected="977980f2-ebb2-4c2a-92c2-4ecdc89b248d"> 
     <option value="5802239e-c601-4f1e-9067-26321213f6e6">Societa per Azioni (SpA)</option> 
     <option value="f8160341-4a69-436f-9882-4da31a78f1d5">Gesellschaft mit beshrankter Haftung (GmbH)</option> 
     <option value="977980f2-ebb2-4c2a-92c2-4ecdc89b248d">Sociedad Anonima (SA)</option> 
     <option value="cdbeb1d3-301b-4884-b65a-612ddd8306f3">Private Limited Company (Ltd)</option> 
     <option value="1fe68d96-f31b-4859-9869-8c76a5eb1508">Corporation (Inc)</option> 
     <option value="9c9e5722-ab59-4d1c-a0a3-91b42a3ee721">Limitada (LTDA)</option> 
     <option value="0cb57339-8705-4e3a-8f6a-95e9664962b7">Public Limited Company (Plc)</option> 
     <option value="0924d6f1-06a9-49a3-ac05-b3e2686a0e92">Partnership</option> 
     <option value="c8fbe021-a8f7-4e9d-ab38-dbeb5af5a631">Limited Liability Company (LLC)</option> 
     <option value="30d9e22b-34f5-43c5-8471-e614dbedb6a6">Aktiengesellschaft(AG)</option> 
    </select> 

あなたはそれが外側のselectタグに代わりのIDと一致するオプションの「選択」属性を入れている見ることができるように。私は別の選択が同じパラメータ(もちろん変数名を除く)を持っており、この方法で正しくレンダリングします。 DropDownListFor<T>を使用したくないのは、フォームにこの値を実際に送信するHiddenForフィールドと、選択肢の選択肢に一致する値を設定するjavascriptがあるためです。私はデータベースが私が正しく設定した値を格納していることを確認しました。何が起こっている?

答えて

2

SelectList()には、選択したアイテムを選択するための負荷があります。ヘルパーでHTML属性として追加していて、それらは親selectタグにレンダリングされます。

はこれを行います。どのようなあなたのコードnew { @class = "selectbox", selected = Model.CounterpartyType }の1行目に起こっていることは、あなたのように選択した属性を提供しているされて

new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue); 
0

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value", Model.CounterpartyType), new { @class = "selectbox" }) 

は、4つの引数を取りますSelectListのためのオーバーロードを使用します親のHTML属性を選択して要素を選択します。

だからはところで何もしない出力の最初の行に表示される=「977980f2-ebb2-4c2a-92c2-4ecdc89b248d」を選択参照してください。

また、モデルから必要な実際の値の代わりに、ハードコードされた文字列「値」として検索する値を提供しています。ブラウザは 'value'に一致する値を見つけることができないので、最初のオプションをデフォルトにします。 これを修正するには、 'value'ではなくSelectListパラメータの3番目のパラメータとしてModel.CounterpartyTypeを指定します。

関連する問題