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 に答える