我有一個Razor視圖內下拉列表中的項目列表。在數據庫中,每個項目都有3個與之關聯的值 - 數據庫ID,短名稱(用於顯示)和長名稱(用於傳遞給服務)。下拉菜單必須顯示短名稱,所以我使用數據庫ID作爲值填充下拉列表,短名稱作爲文本。添加屬性以選擇列表選項
但是,當用戶選擇一個項目時,我需要將長名稱作爲查詢參數傳遞給使用jQuery的搜索服務,例如,當選擇Cortina時,需要將「Ford Cortina 1979 Blue」傳遞給該服務。我的第一個想法是將長名稱存儲爲數據短線屬性,但我想知道是否有更好的方法。所以
- 如何將所有3個值存儲在下拉列表中?
- 如果我確實使用數據短線屬性,我該如何將所有LONG_NAME值合併到Html.DropDownListFor中,或者以某種方式將它們添加到下拉列表中?
DB:
CARID SHORT_NAME LONG_NAME
1 Viper Dodge Viper 1982
2 Boxster Porsche Boxster 2009 Black
3 Cortina Ford Cortina 1979 Blue
控制器助手向下創建降:
public static IEnumerable<SelectListItem> GetSelectList(this IEFRepository repository, string typeName)
{
var vehicle = repository.TypeTypes.FirstOrDefault(t => t.Name.ToUpper() == typeName);
if (vehicle != null)
{
var carList = vehicle.SubTypes.ToList().OrderBy(s => s.Name);
var selectList = new SelectList(subTypeList, "SubTypeID", "Name");
return selectList;
}
}
下面是我用它來創建下拉代碼:
<div class="editor-field">
@Html.DropDownListFor(model => model.CarID,
new SelectList(ViewBag.Cars, "Value", "Text", "1"))
@Html.ValidationMessageFor(model => model.CarShortName)
</div>
這裏的輸出:
<select id="CarID" name="CarID" data-val="true" data-val-number="The field CarID must be a number." data-val-required="The CarID field is required.">
<option value="2">Boxster</option>
<option value="3">Cortina</option>
<option selected="selected" value="1">Viper</option>
</select>
我遇到過類似的情況。我必須有一個允許用戶在對象圖中選擇記錄的下拉菜單。有4個相關表格,每個表格大約有5個字段。我最終不得不編寫一個javascript API來解構DropDownListFor生成的html,然後重新創建一個下拉列表以替換原始列表。我在這裏問了幾個問題,但從來沒有得到任何好的迴應,我覺得'DropDownListFor'在框架中是一種被遺忘的後繼者。 –