使用不同参数MVC/JavaScript路由到此操作
本文关键字:路由 JavaScript 操作 MVC 参数 | 更新日期: 2023-09-27 18:22:25
早上好,我会尽可能清楚地解释这一点。
该页面会返回特定帐户的信息,但有些人可能在多个帐户上,我希望提供在他们之间切换的功能。
目前我的路线设置为:
{controller}/{action}/{accountcode}
{accountcode}
可以为空,这在操作中被选中并设置为默认代码。
到目前为止,我已经让它正常工作,所以你可以访问以下网址:
{controller}/{action} OR {controller}/{action}/{accountcode}
因此,我设置了一个下拉列表,为您提供您可以访问的列表,当选中时,它会将您发送到该特定帐户的URL。
当我转到{controller}/{action}
并选择时,这非常有效,因为它使用window.location.href
并附加下拉列表值。
然而,当您在{controller}/{action}/{accountcode}
时,下拉菜单重定向到,并且您选择了一个帐户,由于我糟糕的javascript逻辑,它只是试图附加另一个帐户代码。
我想我正在寻找一种方法,在没有任何参数的情况下获得当前操作的URL,这样我就可以自己定义它们了。这是我遇到的困难,因为我不能使用Url Helper或Route Helper方法,因为这个功能在布局页面中,这实际上意味着我需要获得当前页面的操作。
这是我的代码,希望它能提供清晰:
@if ((ViewBag.Accounts ?? new List<string>{"none"}).Count > 1)
{
@Html.DropDownList("accounts", new SelectList(ViewBag.Accounts, ViewBag.AccountCode))
}
$(function() {
$("#accounts").change(function () {
window.location.href = window.location.href + "/" + $(this).val();
});
});
干杯!
但是,当您在{controller}/{action}/}accountcode}下拉重定向到,并且您选择了一个帐户,它只是尝试由于我糟糕的javascript逻辑,添加了另一个帐户代码。
好吧,你可以通过使用URL助手很容易地修复这个破旧的逻辑:
<script type="text/javascript">
$(function() {
$("#accounts").change(function () {
var url = '@Url.Action(null, new { accountcode = "__code__" })';
url = url.replace('__code__', $(this).val());
window.location.href = url;
});
});
</script>
或者,如果这是在一个单独的javascript文件中,那么只需将基本url作为HTML5数据属性嵌入到下拉列表中:
@if ((ViewBag.Accounts ?? new List<string>{"none"}).Count > 1)
{
@Html.DropDownList(
"accounts",
new SelectList(ViewBag.Accounts, ViewBag.AccountCode),
data_url = Url.Action(null, new { accountcode = "__code__" })
)
}
然后在单独的javascript文件中只需使用以下值:
$(function() {
$("#accounts").change(function () {
var url = $(this).data('url');
url = url.replace('__code__', $(this).val());
window.location.href = url;
});
});
确保基本URL只有{controller}/{action}
值。
window.location = "/Controller/MyAction/" + $(this).val();
或者使用Url
助手类:
window.location = "@Url.Action("MyAction")/" + $(this).val();