asp.net-mvc - 仍然有 ddl 重定向问题
问题描述
我仍然有问题。我认为我想做的很简单。我有一个 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>
解决方案
根据对上述问题的评论:
所以现在我只需要重定向到:
@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。
推荐阅读
- image - 如何通过 Jenkins 容器从 docker hub 中提取图像
- php - 未定义列:7 错误:列不存在
- javascript - 两个数组的水平串联
- javascript - 将数据发送到另一个页面 - html
- svn - 用于避免提交大于 100MB 的预提交脚本
- c++ - 通过this指针访问时的成员与自身的成员指针的区别(简单QT示例问题)
- sql-server - SSIS sysssislog 表 - Starttime 或 EndTime 是否记录为 UTC?
- android - RecyclerView 不会显示图像但显示文本
- linux - 如何正确读取带有 sh 脚本的文件并在 if 语句中使用它?
- javascript - 如何在没有事件的情况下调用 ember octane 模板中的函数?