首页 > 解决方案 > 将属性添加到 MVC 选择列表

问题描述

我正在我的 MVC 应用程序中创建一个选择列表,并且需要复制用 HTML 编写的内容。

我有以下代码,它当前从模型中获取数据,并为模型中的每个项目生成包含选项的选择列表,包括 JobID 作为值,WebDescription 作为文本,并使用类别对下拉列表中的项目进行分类。

var basketDetails = new SelectList(items.basketJobCodes, "jobID", "WebDescription", "category", 1);

List<SelectListItem> basketItems = basketDetails.ToList();

basketItems.Insert(0, (new SelectListItem { Text = "-- Please pick an item for collection --", Value = "none", Selected = true }));

@Html.DropDownList("basket-item", basketItems, new { @id = "edit-basket-item", @class = "form-select"})

当前版本在每个名为 itemCat 的下拉项目上都有一个额外的属性,它给出了一个用于对每个项目进行分类的数字(见下文),但是我不知道如何将属性添加到我的选择列表并从模型中获取值正如我对 JobID、WebDescription 和类别所做的那样。

<optgroup label="1 for £10">
@foreach (var item in ViewBag.largeJobs)
{ 
<option value="@item.jobID" itemCat="@item.bags"@item.WebDescription</option>
}
</optgroup>

有任何想法吗?

标签: c#model-view-controller

解决方案


这是简单的解决方案。

使用 MVC4,您可以使用帮助器 HTML.NameForHTML.IdFor 获取表达式树上元素的 ID 和名称

<select name="@Html.NameFor(Function(model) model.jobId)"
        id="@Html.IdFor(Function(model) model.jobId)">
    @For Each item In ViewBag.largeJobs
        @<option value="@item.jobID"
                 @(If(item.jobID = Model.CityId, "selected", ""))
                 itemCat="@item.bags">
            @item.WebDescription
        </option>
    Next
</select>

推荐阅读