2011-08-01 60 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> 

正如你可以看到它是把「選擇」屬性到外選擇標籤,而不是在該ID相匹配的選項。我有另一個選擇具有相同的參數(當然除了變量名稱),它以這種方式正確渲染。我不想使用DropDownListFor<T>,因爲我有一個HiddenFor字段,它實際上會在表單中提交此值,而javascript會將值設置爲與Select選項匹配。我已確認我的數據庫正在存儲正確設置的值。到底是怎麼回事?

回答

2

SelectList()有重載讓您選擇所選項目。您將其添加爲助手中的HTML屬性,並將其渲染爲父級選擇標記。

這樣做:

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

使用重載的SelectList這四個參數:

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

發生了什麼事在你的代碼的第一行new { @class = "selectbox", selected = Model.CounterpartyType }爲你提供選擇的屬性作爲父級的HTML屬性選擇元素。

所以你看選擇=「977980f2-ebb2-4c2a-92c2-4ecdc89b248d」出現在你的輸出的第一線,順便說一句什麼都不做。

此外,您還提供了在Helper中作爲硬編碼字符串「值」搜索的值,而不是您在模型中需要的實際值。瀏覽器將默認爲第一個選項,因爲它找不到與「值」匹配的任何值。 要解決此問題,請提供Model.CounterpartyType作爲您的SelectList參數而不是「值」的第三個參數。