仍然存在DDL重定向问题

时间:2019-06-26 15:16:34

标签: asp.net-mvc

我仍然有问题。我想我想做的很简单。我有一个Viewbag下拉列表-运行正常。我只想在选择时进行重定向,就可以像@Html.ActionLink("Branch", "Employees", new { Branch = item.Branch }) | (但要从下拉列表中进行选择)这应该很难吗?

@Html.DropDownList("Branches", ViewBag.Branches as SelectList, "Select a Branch", new { @id = "ddlBranch" })

<script>
    $(function () {

        $("#ddlBranch").on("change", function () {
            var deptId = $(this).val();
            var routeVal = { Id: deptId };
            var url = '@Url.Action("Department", "Home")';

            $.ajax({
                url: url,
                type: 'POST',
                data: routeVal
            }).done(function (result) {
                window.location.href = result.newUrl;
            })
        })

    })
</script>

1 个答案:

答案 0 :(得分:1)

来自对以上问题的评论:

  

所以现在我只需要重定向到:@Html.ActionLink("Branch", "Employees", new { Branch = item.Branch }),但是Item.Branch将是$(this).val()。能做到吗?

也许有一种更优雅的方法,但是我一直采用的方法是这样的:

let url = '@Html.ActionLink("Branch", "Employees", new { Branch = "REPLACEME" })';
url = url.replace('REPLACEME', $(this).val());
window.location.href = url;

在客户端,这变成了类似的东西:

let url = '/Brand/Employees?Branch=REPLACEME';
url = url.replace('REPLACEME', encodeURIComponent($(this).val()));
window.location.href = url;

我敢肯定,对于那些只检查客户端代码的人来说,这看起来很愚蠢。但是由于Branch参数可能在查询字符串中,或​​者可能在路由中,并且管理它是ASP.NET MVC框架的责任,生成URL并将客户端值放入 URL是这里的两个独立职责。

因此,我们使用服务器端代码来生成带有占位符的URL(可以是任意字符串,"REPLACEME"是任意选择),然后使用客户端代码将占位符动态替换为所需的占位符值。

这基本上替代了您在原始问题中尝试使用AJAX执行的任何操作。除非您需要调用服务器端操作以获取客户端代码不知道的结果以构建URL,否则您可以完全省略AJAX并直接构建URL。