3

私は、3 つの言語フラグ (画像) を含むレイアウトを使用する ASP.NET MVC4 ベースの Web アプリケーションを持っています。これらのフラグは、サイト全体で表示されます。これらの画像を言語選択に使用したいと思います。特定の言語でページを表示するには、現在の URL にパラメーターを追加して読み込むだけで済みます。次に、コントローラーがそれを評価し、モデルに正しい言語を設定します (または、ある場合はデフォルトのフォールバック言語を設定します)。リクエストで言語が指定されていません)。

次に例を示します。

言語が指定されていません:

http://example.com?StationId=12

指定言語:

http://example.com?StationId=12&lang=1033

私の質問は次のとおりです:言語フラグの画像を囲み、言語パラメーターのみがある場合に、すべてのパラメーターと新しいパラメーターを&lang=1033それぞれ使用して、現在読み込まれている URL を常に指すレイアウト内のリンクを形成するにはどうすればよいですか??lang=1033

つまり、すべてのパラメーターを使用してまったく同じページへのリンクを作成し、ルート値を URL に追加する方法は?

更新:これは詳細な例です

_Layout.cshtmlは持っています:

@{
var u_eng = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_deu = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_por = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
u_eng.Add("lang", "1033");
u_deu.Add("lang", "1031");
u_por.Add("lang", "1046");
}
.
.
.
<li>
    <a href="@Url.RouteUrl(u_por)" class="Flag BR">BR</a>
</li>
<li>
    <a href="@Url.RouteUrl(u_eng)" class="Flag US">US</a>
</li>
<li>
    <a href="@Url.RouteUrl(u_deu)" class="Flag DE">DE</a>
</li>

サイトを実行すると、スタート ページのリンクが正常に機能し、現在のページを指し、対応する URL に lang=xy パラメータが追加されます。

しかし、まったく同じレイアウト ファイルを使用し、パラメーターも使用する別のページに移動すると、リンクが正しく作成されません。次の URL で定義されたサブページに移動するとします。

http://localhost:1234/Stations?position=up

ページ自体は正しく表示されます。しかし、言語リンクにカーソルを合わせるかたどると、次のようになります。

http://localhost:1234/Stations?lang=1031それ以外の

http://localhost:1234/Stations?position=up&lang=1031

ご覧のとおり、既存のパラメーターは省略されています。

4

2 に答える 2

8

現在のルート値コレクションを使用し、それに新しい値を追加してから、url helper で URL を生成できますRouteUrlHttpContext.Request.QueryStringページに渡されたクエリ文字列パラメーターを収集するには、辞書を反復処理します。

@{
    var currentRouteValues = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
    var queryString = Request.QueryString;
    foreach (var key in queryString.AllKeys)
    {
        currentRouteValues.Add(key, queryString[key]);
    }

    currentRouteValues.Add("lang", "1033"); 
}

次に、次のように使用します。

@Url.RouteUrl(currentRouteValues)
于 2014-02-21T11:16:27.507 に答える