带有下拉列表中id值的Html.ActionLink

时间:2010-11-06 13:41:48

标签: asp.net-mvc-2 drop-down-menu actionlink

我有一个下拉列表: <%= Html.DropDownList(“ddlNames”,新的SelectList(Model.NameList,“ID”,“Name”))%>

我有一个ActionLink: <%:Html.ActionLink(“edit”,“Edit”,“Members”,new {area =“MembersArea”,id = XXX},null)%>

我想要XXX中的下拉列表的值。 所以我想在ActionLink的视图中使用控件的值。 这有可能以简单的方式进行吗?

感谢,

菲利普

2 个答案:

答案 0 :(得分:3)

您无法执行此操作,因为html帮助程序在服务器端执行,而下拉列值可以在客户端更改。实现它的唯一方法是使用javascript。您可以注册下拉列表的onchange事件并修改锚点的href值:

$(function() {
    $('#ddlNames').change(function() {
        var value = this.value; // get the selected value
        // TODO: modify the value of the anchor
    });
});

这可能不是最好的解决方案,因为路由是在服务器端配置的,并且为了修改在客户端进行字符串操作所需的链接值。

作为替代方案,您可以使用表单和提交按钮而不是锚点。这样,下拉列表的选定值将自动发送到服务器,您不需要任何javascript:

<% using (Html.BeginForm("Edit", "Members", new { area = "MembersArea" })) { %>
    <%= Html.DropDownListFor(x => x.SelectedName, 
        new SelectList(Model.NameList, "ID", "Name"))%>
    <input type="submit" value="Edit" />
<% } %>

答案 1 :(得分:3)

每次更改相关下拉列表时,不要修改锚点的值,只需在点击时修改一次。

使用Razor的示例:

@Html.DropDownList("DropDownFirstNames", new SelectList(Model.FirstNames, "ID", "Name"))
@Html.DropDownList("DropDownLastNames", new SelectList(Model.LastNames, "ID", "Name"))
@Html.ActionLink("Submit name", "ActionName", "ControllerName", null, new { @id = "SubmitName" })

<script type="text/javascript">
    $('#SubmitName').click(function () {
        var first = $('#DropDownFirstNames').val(); 
        var last = $('#DropDownLastNames').val();
        var path = '@Url.Content("~/ControllerName/ActionName")' + "?firstId=" + first + "+&lastId=" + last
        $(this).attr("href", path);
    });
</script>