我是 ASP.net MVC 新手,在使下拉列表正常工作时遇到问题。
我有一个强类型 View ,它尝试使用 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 设置为“已选择”,但是当我的 View 呈现下拉列表时,无论什么标记为已选择,生成的 HTML 都没有选择任何内容。
我显然做错了什么或遗漏了什么,但我一生都无法弄清楚是什么。
最佳答案
事实证明我必须编写一个下拉列表助手。我找到了这篇文章here 。这是我的代码,以防其他人需要它。它是从文中的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
关于asp.net-mvc - Html.DropDownListFor 未按预期行为 ASP.net MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3046811/