MVC DropDownList外观

安迪

因此,我正在使用MVC创建一个站点,并且我的DropDownLists和DropDownListFors看起来与页面上的其他输入元素不同。我尝试将其类设置为相同的“ form-control”,甚至尝试在具有几乎相同属性(称为“ mydropdown”)的css中添加我自己的类,并使用该类-均没有效果。

因此,我发现约瑟夫·伍德沃德(Joseph Woodward)回答了这个非常方便的话题,我刚刚尝试过...。

我使用的是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,“ Dropdown”)

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

对非共享成员的引用需要对象引用。

因此,我在顶部的代码部分添加了一个声明:

Dim newDropDown As BootstrapHtml =新的BootstrapHtml

现在,我在视图中的行如下所示:

@newDropDown = BootstrapHtml.Dropdown(“ typecombo”,TypeList,“ Dropdown”)

因此,现在我的网站可以正常运行了,但是当我转到此页面时,看到的是一个字符串,而不是下拉列表,它是:

[myproject] .BootstrapHtml = BootstrapHtml.Dropdown(“ typecombo”,TypeList,“ Dropdown”)

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

谢谢!!

恩科西

基于链接发布,该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")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章