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

时间:2013-07-16 10:35:34

标签: c# jquery asp.net-mvc razor

早上好,我会尽力解释这个问题。

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

目前我将路线设置为:

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

干杯!

2 个答案:

答案 0 :(得分: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文件,那么只需将基本网址作为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;
    });
});

答案 1 :(得分:0)

确保基本网址只包含{controller}/{action}个值。

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

或使用Url助手类:

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