使用不同参数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();
    });
});

干杯!

使用不同参数MVC/JavaScript路由到此操作

但是,当您在{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();