asp.net-mvc - Html.DropDownListFor 未按预期行为 ASP.net MVC

标签 asp.net-mvc vb.net asp.net-mvc-2 html.dropdownlistfor

我是 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/

相关文章:

asp.net-mvc - 将胖 Controller 管理到业务服务层的一些 Asp.NET MVC2 最佳实践

c# - 使用 Entity Framework 6 和 C# 调用现有存储过程

c# - 如何构造HttpPostedFileBase?

asp.net-mvc - 使用 MVC 和 jQuery 进行内联客户端验证

c# - 将 X-Robot-Tag 添加到 Sitecore 8 中的响应 header

c# - Umbraco Razor 按数字属性排序

c++ - 在 VB.NET 中调用 C++ DLL 文件

vb.net - 获取调用方法的名称

vb.net - 添加新项目时自动添加命名空间

c# - 在 SEO 的动态 UR 中使用 *.html 扩展名