【发布时间】:2016-12-25 09:21:47
【问题描述】:
所以我正在使用 MVC 创建一个站点,而我的 DropDownLists 和 DropDownListFors 看起来与页面上的其他输入元素不同。我尝试将他们的类设置为相同的“表单控件”,甚至尝试在 css 中添加我自己的类,该类具有几乎相同的属性,称为“mydropdown”并使用它 - 两者都没有效果。
所以我找到了我刚刚尝试过的this very handy thread answered by 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, "下拉")
所以现在我的网站运行没有错误,但是当我转到此页面时,我看到的不是下拉列表,而是以下字符串:
[myproject].BootstrapHtml = BootstrapHtml.Dropdown("typecombo", 类型列表,“下拉”)
那么,我想首先我班上的字符串翻译是否正确(如上所述)?如果是,为什么我在页面上看到的是字符串而不是实际的下拉列表?
谢谢!!
【问题讨论】:
标签: asp.net-mvc vb.net razor html.dropdownlistfor