-->

MVC DropDownList的外观和感觉(MVC DropDownList look and f

2019-09-29 19:49发布

所以我创建使用MVC网站,我的DropDownLists和DropDownListFors看起来不一样的页面上的其他投入要素。 我试着设置他们的阶级是相同的“表单控制”,甚至试图加入我自己的类中有几乎相同的性能称为“mydropdown”和使用的CSS - 既没有效果。

所以我发现约瑟夫·伍德沃德回答了这个非常有用的线索 ,我只是试图....

我使用VB而不是C#,所以我不得不把它翻译。 这是我的翻译BootstrapHtml:

Public Class BootstrapHtml

    Public Function Dropdown(id As String, selectListItems As List(Of SelectListItem), label As String) As MvcHtmlString

        Dim button = New TagBuilder("button")
        button.Attributes.Add("id", id)
        button.Attributes.Add("type", "button")
        button.Attributes.Add("data-toggle", "dropdown")

        button.AddCssClass("btn")
        button.AddCssClass("btn-default")
        button.AddCssClass("dropdown-toggle")

        button.SetInnerText(label)
        button.InnerHtml += " " + BuildCaret()

        Dim wrapper = New TagBuilder("div")
        wrapper.AddCssClass("dropdown")
        wrapper.InnerHtml += button.ToString
        wrapper.InnerHtml += BuildDropdown(id, selectListItems)

        Return New MvcHtmlString(wrapper.ToString)

    End Function

    Private Function BuildCaret() As String

        Dim caret = New TagBuilder("span")
        caret.AddCssClass("caret")

        Return caret.ToString

    End Function

    Private Function BuildDropdown(id As String, items As IEnumerable(Of SelectListItem)) As String

        Dim list = New TagBuilder("ul")
        list.Attributes.Add("class", "dropdown-menu")
        list.Attributes.Add("role", "menu")
        list.Attributes.Add("aria-labelledby", id)

        Dim listItem = New TagBuilder("li")
        listItem.Attributes.Add("role", "presentation")

        For Each x In items
            list.InnerHtml += "<li role=\presentation\>" & BuildListRow(x) & "</li>"
        Next

        Return list.ToString

    End Function

    Private Function BuildListRow(item As SelectListItem) As String

        Dim anchor = New TagBuilder("a")
        anchor.Attributes.Add("role", "menuitem")
        anchor.Attributes.Add("tabindex", "-1")
        anchor.Attributes.Add("href", item.Value)

        anchor.SetInnerText(item.Text)
        Return anchor.ToString

    End Function

End Class

有一两件事我不知道我有权利在For Each循环字符串连接....

在任何情况下,我认为我试着用

@ BootstrapHtml.Dropdown( “typecombo”,TYPELIST, “下拉”)

但它给了我一个代码错误:

参照本发明的非共享成员需要的对象引用。

所以我加在上面的代码段的声明:

昏暗newDropDown作为BootstrapHtml =新BootstrapHtml

和我的观点一致,现在看起来是这样的:

@newDropDown = BootstrapHtml.Dropdown( “typecombo”,类型串, “下拉”)

所以,现在我的网站没有任何错误运行,但是当我去这个页面,而不是一个下拉列表,我看到的字符串,它是这样的:

[myproject的] .BootstrapHtml = BootstrapHtml.Dropdown( “typecombo”,类型串, “下拉”)

所以,我想首先是班里字符串翻译正确的(如上所述)? 如果是,为什么我看到我的网页上的字符串,而不是实际的下拉?

谢谢!!

Answer 1:

基于链接后的Dropdown方法应该是静态的。 这在Vb.Net被Shared的关键字即

Public Class BootstrapHtml

    Public Shared Function Dropdown(id As String, selectListItems As List(Of SelectListItem), label As String) As MvcHtmlString
        '''other code removed for brevity
    End Function

End Class

事实上,在类中的所有功能应共享。 这是什么原因造成你所说的引用错误。

这样,您应该然后能够调用它像例子。

@BootstrapHtml.Dropdown("typecombo", TypeList, "Dropdown")


文章来源: MVC DropDownList look and feel