我在 Razor 视图的下拉列表中有一个项目列表。在数据库中,每个项目都有 3 个与之关联的值 - 数据库 ID、短名称(用于显示)和长名称(用于传递给服务)。下拉列表必须显示短名称,因此我使用数据库 id 作为值和短名称作为文本填充下拉列表。
然而,当用户选择一个项目时,我需要将长名称作为查询参数传递给使用 jQuery 的搜索服务,例如当 Cortina 被选中时,需要将“Ford Cortina 1979 Blue”传递给该服务。我的第一个想法是将长名称存储为数据破折号属性,但我想知道是否有更好的方法。所以
- 如何将所有 3 个值存储在下拉列表中?
- 如果我确实使用数据破折号属性,我如何将所有 LONG_NAME 值合并到 Html.DropDownListFor 或以某种方式将它们添加到下拉列表中?
D B:
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>