我是 ASP.net MVC 的新手,在使下拉列表正常工作时遇到问题。
我有一个强类型视图,它尝试使用 Html.DropDownListFor ,如下所示:
<%=Html.DropDownListFor(Function(model) model.Arrdep, Model.ArrdepOptions)%>
我使用模型中的属性填充列表,如下所示:
Public ReadOnly Property ArrdepOptions() As List(Of SelectListItem)
Get
Dim list As New List(Of SelectListItem)
Dim arriveListItem As New SelectListItem()
Dim departListItem As New SelectListItem()
arriveListItem.Text = "Arrive At"
arriveListItem.Value = ArriveDepart.Arrive
departListItem.Text = "Depart At"
departListItem.Value = ArriveDepart.Depart
Select Case Me.Arrdep
Case ArriveDepart.Arrive : arriveListItem.Selected = True
Case Else : departListItem.Selected = True
End Select
list.Add(departListItem)
list.Add(arriveListItem)
Return list
End Get
End Property
Select Case 可以查找并将正确的 SelectListItem 设置为“已选择”,但是当我的视图呈现下拉列表时,无论标记为“已选择”的内容是什么,生成的 HTML 都不会选择任何内容。
我显然做错了什么或错过了什么,但我一生都无法弄清楚是什么。
事实证明我必须编写一个下拉列表助手。我找到了这篇文章here https://learn.microsoft.com/en-us/archive/blogs/ukadc/asp-net-mvc-creating-a-dropdownlist-helper-for-enums。这是我的代码,以防其他人需要它。它是从文中的C#示例粗略翻译成VB的。
Imports System.Linq.Expressions
Imports System.Runtime.CompilerServices
Namespace Helpers
Public Module HtmlDropDownExtensions
<Extension()> _
Public Function EnumDropDownList(Of TEnum)(ByVal htmlHelper As HtmlHelper, ByVal name As String, ByVal selectedValue As TEnum) As MvcHtmlString
Dim values As IEnumerable(Of TEnum) = [Enum].GetValues(GetType(TEnum))
Dim list As New List(Of SelectListItem)
For Each value As TEnum In values
Dim selectListItem As New SelectListItem()
selectListItem.Text = value.ToString()
selectListItem.Value = value.ToString()
selectListItem.Selected = (value.Equals(selectedValue))
list.Add(selectListItem)
Next
Dim items As IEnumerable(Of SelectListItem) = list
Return htmlHelper.DropDownList(name, items)
End Function
<Extension()> _
Public Function EnumDropDownListFor(Of TModel, TEnum)(ByVal htmlHelper As HtmlHelper(Of TModel), ByVal expression As Expression(Of Func(Of TModel, TEnum))) As MvcHtmlString
Dim metadata As ModelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData)
Dim values As IEnumerable(Of TEnum) = [Enum].GetValues(GetType(TEnum))
Dim list As New List(Of SelectListItem)
For Each value As TEnum In values
Dim selectListItem As New SelectListItem()
selectListItem.Text = value.ToString()
selectListItem.Value = value.ToString()
selectListItem.Selected = (value.Equals(metadata.Model))
list.Add(selectListItem)
Next
Dim items As IEnumerable(Of SelectListItem) = list
Return htmlHelper.DropDownListFor(expression, items)
End Function
End Module
End Namespace
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)