我在Razor视图中有一个下拉列表中的项目列表.在数据库中,每个项目都具有与之相关联的3个值 – 数据库标识,短名称(用于显示)和长名称(用于传递给服务).下拉列表必须显示短名称,所以我将数据库id作为文本的缩写名称填入下拉列表.
然而,当用户选择一个项目时,我需要使用jQuery将长名称作为查询参数传递给搜索服务,例如当选择Cortina时,需要将“Ford Cortina 1979 Blue”传递给该服务.我的第一个想法是将长名称存储为数据破折号属性,但我想知道是否有更好的方法.所以
>如何在下拉列表中存储所有3个值?
>如果我使用数据破折号属性,如何将所有LONG_NAME值整合到Html.DropDownList中或以某种方式将它们添加到下拉列表中?
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>
解决方法
每个人都忘记了“经典”的方式来解决这些问题:使用foreach循环,并实际写入输入的html.只有不利的是,您必须添加自动属性的东西(如验证等),这取决于您的目的可能不是一件大事.
就像是:
<select> // add other attributes as expected @foreach(var type in Model.MyFancyTypes) { <option value="@type.SubTypeID" data-description="@type.Description" @if(ViewBag.TypeSelected == type.SubTypeID) { selected="selected" }>@type.Name</option> } </select>
原文地址:https://www.jb51.cc/aspnet/249848.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。