0

早上好,我会尽量解释清楚。

该页面返回特定帐户的信息,但有些人可能使用多个帐户,我希望提供在它们之间切换的功能。

目前我的路线设置为:

{controller}/{action}/{accountcode}

{accountcode}可以为空,并在操作中检查并设置为您的默认代码。

到目前为止,我的工作正常,因此您可以访问以下 URL:

{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();
    });
});

干杯!

4

2 回答 2

2

但是,当您位于下拉重定向到的 {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 作为 HTML 5 data-* 属性嵌入到您的下拉列表中:

@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;
    });
});
于 2013-07-16T10:38:22.773 回答
0

确保基本 URL 仅包含{controller}/{action}值。

window.location = "/Controller/MyAction/" + $(this).val();

或使用Url辅助类:

window.location = "@Url.Action("MyAction")/" + $(this).val();

于 2013-07-16T10:38:43.137 回答