如何正确使用带有SelectList的Html.DropDownList?

时间:2017-01-11 14:41:19

标签: asp.net-mvc vb.net visual-studio

我在使用带有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中正确显示,但我不确定我哪里出错了。

非常感谢任何帮助,谢谢!

1 个答案:

答案 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")