Html.DropDownList - 如何向列表中添加额外的<option>

8

我正在使用Html.DropDownList来创建选项列表,如下所示:

Html.DropDownList("LogType", new SelectList(Model.LogTypeList, "ID", "Name", Model.SelectedLogType),"-- ALL --");

如您所见,我传递了一个列表,但也传递了一个额外的参数来添加一个附加选项:"--全部--"。结果如下:

<select name="LogType" id="LogType">
<option value="">-- ALL -- </option>
<option value="1">Debug</option>
<option value="2" selected="selected">Error</option>
</select>

如何给-- 所有 --赋值为0,而不必手动构建下拉列表?


这个问题已经在https://dev59.com/okbRa4cB1Zd3GeqP2qsC#581944中得到了回答。 - bPratik
1
可能是 如何在 Html.DropDownList 中设置默认选项的值 的重复问题。 - Daniel Hilgarth
3个回答

6
我不确定,但为什么不在@html.DropDownList之前构建列表呢?
var myList = new SelectList(Model.LogTypeList, "ID", "Name", Model.SelectedLogType);

然后将您想要的项目附加到其中。
var myList.add(new selectItem("-- ALL --",0));

最后将其传递给您的语法,看看这将产生什么结果。
Html.DropDownList("LogType",myList);

抱歉,这只是我用iPhone快速回答的,不确定它是否能解决你的问题,但我尽力帮助了。


3
我之前尝试过这个,最后使用了jQuery:
$("#LogType").append($("<option />").val("0").html("-- All --"));

1

为了采用不同的方法,我惊讶地发现论坛上有很多关于这个问题的答案,所有这些答案似乎都过于复杂,而在WebForms中可以轻松使用AppendDataItems实现(当然,这是WebForms!)。

这对我来说在几分钟前运行良好,使所有内容保持一致,并保持视图和模型的分离:

@Html.DropDownListFor(model => model.Operators,
                new SelectList(new[] { 
                    new {id=-1, name="Please select an operator"}}
                    .Union(Model.Operators
                            .Select( o=> new { id=o.Id, name=o.Name})
                    ), "id", "name")) 

它的渲染结果为:

<select id="Operators" name="Operators">
    <option value="-1">Please select an operator</option>
    <option value="1">Tony Bolton</option>
    <option value="2">Joe Bloggs</option>
</select>

尽管我还没有检查性能等方面的内容,但觉得这值得分享。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接