在ASP.NET MVC 5中使用@Html.DropDownListFor设置数组中值的选中项
在ASP.NET MVC 5应用程序中,@Html.DropDownListFor()
辅助方法可用于从数据集合生成下拉列表。但是,当处理复杂数据结构(例如数组)时,根据数组中属性设置选中值可能会带来挑战。
考虑以下ViewModel:
<code class="language-csharp">@model MyProject.Web.API.Models.AggregationLevelConfViewModel @Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, (SelectList)Model.HelperCodeTypeItems, new { id = "Configurations[0].HelperCodeType" })</code>
这里的挑战是如何根据Configurations
数组中第一个AggregationLevelConfiguration
对象的HelperCodeType
属性设置下拉列表中的选中值。SelectList
构造函数中设置选中值的常规方法无效,因为HelperCodeTypeItems
集合中没有可用的选中值。
解决方案:
方法一:使用编辑器模板
在/Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml
中创建一个编辑器模板:
<code class="language-csharp">@model yourAssembly.AggregationLevelConfiguration @Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])</code>
然后,在主视图中,使用additionalViewData
将SelectList
传递给编辑器模板:
<code class="language-csharp">@using (Html.BeginForm()) { ... @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems }) ... }</code>
方法二:生成新的SelectList
将CodeTypeItems
设为IEnumerable<genericidnametype>
而不是SelectList
。然后,在主视图中:
<code class="language-csharp">@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType))</code>
请注意,id
属性由DropDownListFor()
自动生成,无需手动指定。
以上是当值在数组中时,如何在 @html.dropdownlistfor中设置所选值?的详细内容。更多信息请关注PHP中文网其他相关文章!