MVC.NET:为DropDownList定义一个强类型的HTML Helper

时间:2014-04-06 12:42:34

标签: c# jquery html asp.net asp.net-mvc

我试图找出如何定义自己的HtmlHelper来创建下拉列表。我有以下的观点:我使用select2 jQuery插件(http://ivaynberg.github.io/select2/)进行多次选择,搜索和更好的界面。我的模型具有关联的x id标签。据我了解,这些标签只能在使用像@ Html.DropDownListFor()这样的Html助手时得到一个值?我想

  • 编写纯HTML并以某种方式告诉它必须将值存储在我的模型中的tag-id列表中

  • 制作一个可以达到同样效果的HTML Helper。

目前我有这个,但是当表单发布时,我看不到将所选值传递给模型的方法:

<div>
        <label>Kies je thema's (maximum 2):</label>
        <select id="select2select" multiple style="width: 500px">
            @foreach (var top in ((List<Topic>)ViewBag.TopIds).Where(top => top.MainTopic == null))
            {
                <option value="@top.TopicId" class="optionGroup">@top.Name</option>
                foreach (var subTopic in top.SubTopics)
                {
                    <option value="@subTopic.TopicId" class="optionChild">@subTopic.Name</option>
                }
            }
        </select>
    </div>

如何在保持此结构的同时在列表中的属性中获取所选值?

额外:你可以看到我的选项有类,这是因为我有主标签和子标签。用户可以选择主要标签或子标签,因此我无法使用<optiongroup>,因为他们可以使用&#39;组&#39;必须是可选择的。我根据他们的类给他们一个使用select2格式的不同格式。

2 个答案:

答案 0 :(得分:0)

请尝试使用以下代码来解决问题

 @Html.DropDownListFor(m => top.SubTopics, new SelectList(top.SubTopics, "TopicId", "Name"))

答案 1 :(得分:0)

有两种方法可以执行此操作。

@Html.DropDownListFor(m => top.SubTopics, new SelectList(top.SubTopics, "TopicId", "Name"))

@Html.DropDownListFor(m => Model.SubTopics, Model.SubTopics, null, htmlAttributes: new { @class = "ui search selection dropdown clearable", @clearable = "", @id = "Model_SubTopics" })

对于不同的模型绑定,这两个可能会更改html属性“名称”值。

您可以使用标签助手来更现代地进行操作。

<select asp-for="Model.SubTopics" asp-items="@Model.SubTopics"  class="ui search selection dropdown clearable" ></select>

如果您具有输入表单的模型绑定,则这种方式将采用预先配置的值。