28582


ASP.NET MVC の質問です。  
ページ上にドロップダウンリストがあって、ユーザーの選択に応じて

[code]

     /ドロップダウンで選択した値/{controller}/{action}
    
[/code]

のURLにリダイレクトするにはどのように実装すればよいでしょうか？

たとえば、ロケールと言語がそれぞれドロップダウンで選択できるページがあり、初期状態では「現在のロケールと言語」が選択された状態になっています。

ユーザーがロケールに「jp」、言語に「ja」を選択したら

[code]

    /jp/ja/{controller}/{action}
    
[/code]

のページに遷移するイメージです。  
（この場合、ロケール選択時と言語選択時で２回遷移が発生することになりますが、それで構いません）


CC BY-SA 3.0
2016-08-30T09:52:35.127
28581
2016-08-30T10:28:07.943
3925
question
asp.net razor
ドロップダウンリストに連動してURLを生成したい


まず`Application_Start`(`RouteConfig`)でロケールを含むルートを登録します。

[code]

    routes.MapRoute(
        name: "LocaleAndLanguage",
        url: "{locale}/{language}/{controller}/{action}/{id}",
        defaults: new { controller = "Page", action = "Index", id = UrlParameter.Optional }
    );
    
[/code]

次にパターンのパラメーターをアクションメソッドに追加します。  
上の例では`locale`と`language`という名前ですので、

[code]

    string locale,
    string language,
    
[/code]

となります。

このように設定したうえでビューのルートパラメーターを指定する箇所(`Url.Action`など)で`locale`と`language`を指定すれば、仕様に合うURLが生成されると思います。

[code]

    @Url.Action("Hoge", new
    {
        locale = "jp",
        language = "ja",
    })
    
[/code]

また「リダイレクト」ですが、実際にはJavaScriptのイベントを処理することになると思います。  
設計次第ですが、単純に`form`を送信するような実装にもできます。

[code]

    <script>
    
    $('#@Html.IdFor(_ => _.Language)').change(function(){ $('form').submit(); });
    
    </script>
    
[/code]

サーバ側では`Controller.Session`プロパティ等に値を保存しておけばよいでしょう。


CC BY-SA 3.0
2016-08-30T10:28:07.943
28582
2016-08-30T10:28:07.943
5750
28581
answer