在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中文網其他相關文章!