我在使用带有Html.DropDownList的SelectList时遇到问题,我通过查看以前问题的答案无法解决这个问题。
我在视图中有以下代码:
Dim myItems As New Collection
Dim thisItem As SelectListItem
For Each responsibility In Model.Responsibilities.EBS_Resonsibility
thisItem = New SelectListItem
thisItem.Text = responsibility.RESPONSIBILITY_NAME
thisItem.Value = responsibility.RESPONSIBILITY_ID
myItems.Add(thisItem)
Next
从我的模型中获取每个项目,将其转换为SelectListItem,并将其添加到集合中。
然后我把它变成SelectList:
Dim myRoles As New SelectList(myRoleItems, "Value", "Text")
创建我的Html.DropDownList:
@Html.DropDownList("RoleList", myRoles, "Select Role")
最后处理它:
<a href="@Url.Action("RoleHandler", "Account", New With {.RESPONSIBILITY_ID = myRoles.SelectedValue})">Search Buildings</a>
问题是,什么都没有通过。我知道我的最后一行和我的SelectList是正确的,因为如果我在 selectedValue 的SelectList的末尾添加一个参数,它将传递该参数,如下所示:
Dim myRoles As New SelectList(myRoleItems, "Value", "Text", 905)
在这种情况下,905过去了。所以,我相当肯定我在DropDownList中从我的SelectList访问值时做错了。虽然项目的名称在DDL中正确显示,但我不确定我哪里出错了。
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
您对锚标记的代码有一些C#代码,它们在服务器上执行。由于用户可以将选定的下拉选项更改为客户端的其他内容,因此您应该使用客户端javascript来处理此问题。
因此,将链接的href值设置为action方法的基本url(没有路由值),并为其提供一个id,我们将用它来连接一些客户端行为。
@:<a id="myLink" href="@Url.Action("RoleHandler","Account")">Search Building</a>
现在有一些javascript代码可以收听此链接上的点击事件,从下拉列表中获取所选内容并使用它来构建新网址。
@section scripts
<script>
$(function () {
$("#myLink").click(function (e) {
e.preventDefault();
var url = $(this).attr("href");
url = url + "?RESPONSIBILITY_ID ="+$("#RoleList").val();
window.location.href = url;
});
});
</script>
End Section
此外,您实际上不需要创建新的SelectList对象,您可以将SelectListItem列表传递给DropDownList
辅助方法。
Dim list = New List(Of SelectListItem)() From {
New SelectListItem() With {
.Value = "a",
.Text = "a"
},
New SelectListItem() With {
.Value = "b",
.Text = "b"
}
}
和
@Html.DropDownList("RoleList", list, "Select Role")