我正在使用编辑器模板 - 因为我需要遍历我的模型,并在我的模型中显示/编辑许多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>
感谢您的帮助,
标记
答案 0 :(得分: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>
但显然将其定义为视图模型的一部分会更好:
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
}
然后在您的视图中,您只需将下拉列表绑定到视图模型的相应属性:
@model ebs.Models.RatesList
@{ Layout = null; }
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.TypeID)
</td>
<td>
@Html.DropDownListFor(modelType => modellType.NumSelected, Model.Values)
</td>
</tr>