ASP.Net MVC Dynamic DropDownList - 如何创建一个

Mar*_*ark 2 asp.net asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-4

我正在使用编辑器模板 - 因为我需要遍历我的模型,并在我的模型中显示/编辑许多RatesList对象.

这可确保ID和名称正确 - 因此它们会将Post上的模型绑定回控制器.

但是下拉列表需要是动态的 - 所以必须从0显示我的Model.TypeCount.

无论如何我使用@ Html.DropDownListFor帮助器 - 以便正确命名下拉列表?在我的下面的代码中,它只是一个select语句 - 因为我不知道如何使下拉列表动态 - 但是然后没有使用命名约定,并且下拉列表没有绑定回我的模型.我的编辑器视图是:

@model ebs.Models.RatesList
@{ Layout = null; }
<tr>
<td>
    @Html.TextBoxFor(modelItem => modelItem.TypeID)
</td>
<td>
    @{ var num = Model.TypeCount; }

    <select id="NumSelected" name="NumSelected">
        @for (var i = 0; i <= num; i++)
        {
            <option value="@i">@i</option>
        }
    </select>
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,

标记

Dar*_*rov 6

@model ebs.Models.RatesList
@{ Layout = null; }
<tr>
    <td>
        @Html.TextBoxFor(modelItem => modelItem.TypeID)
    </td>
    <td>
        @Html.DropDownList(
            "NumSelected", 
            Enumerable
                .Range(0, Model.TypeCount)
                .Select(x => new SelectListItem 
                { 
                    Value = x.ToString(), 
                    Text = x.ToString() 
                })
        )
    </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

但显然将它定义为视图模型的一部分会更好:

public class RatesList
{
    public int NumSelected { get; set; }
    public IEnumerable<SelectListItem> Values
    {
        get 
        {
            return Enumerable
                .Range(0, this.TypeCount)
                .Select(x => new SelectListItem 
                { 
                    Value = x.ToString(), 
                    Text = x.ToString() 
                })        
        }
    }

    ... some other properties
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您只需将下拉列表绑定到视图模型的相应属性:

@model ebs.Models.RatesList
@{ Layout = null; }
<tr>
    <td>
        @Html.TextBoxFor(modelItem => modelItem.TypeID)
    </td>
    <td>
        @Html.DropDownListFor(modelType => modellType.NumSelected, Model.Values)
    </td>
</tr>
Run Code Online (Sandbox Code Playgroud)