2011-02-08 4 views
0

MVC 2でルーティング問題が発生しました。単純な問題かもしれませんが、動作させることはできません。私は言語を含む2番目のルーティングを登録しました:{...}/de/Home/Index/はすべて正常に動作します。しかし、言語を離れて{...}/Home/Index/と呼ぶと、そのページが見つからない(「リソースが見つかりません」)。私は、これはURLなしで実行する必要があり、MVCはそこに私のデフォルト値を挿入すると予想していただろう。それはどうやって他に働くの?ASP.NET MVC 2ルーティング:言語を追加しました。URLに残しても機能しません。

答えて

4

languageにはconstraintを使用する必要があります。

/Home/Index 

lang = Home 
controller = Index 
action = Index (from defaults) 

このような第1のルールに変換されますトリック実行する必要があります。

routes.MapRoute("Default with language", "{lang}/{controller}/{action}/{id}", new 
{ 
    controller = "Home", 
    action = "Index", 
    id = UrlParameter.Optional, 
}, new { lang = "de|en" }); 
routes.MapRoute("Default", "{controller}/{action}/{id}", new 
{ 
    controller = "Home", 
    action = "Index", 
    id = UrlParameter.Optional, 
    lang = "en", 
}); 
+0

をうーんは良い音が、それでも私のために動作しません。それでもまだ見つかりませんが、今回はIISから "HTTPエラー404.0 - 見つかりませんでした"というメッセージが表示されます。探しているリソースが削除されました。名前が に変更されたか、一時的に利用できませんでした。 URLに言語を保存すると、期待どおりに動作します。 – sl3dg3

+0

2番目(デフォルト)のルートを維持しましたか? Constraintはその値が存在し、それが有効であることを確認し、そうでなければ別のルートの検索を続行します。 Routeインスタンスを1つだけ使用して、オプションのパラメータを効果的にルートの先頭に配置することはできません。 –

+0

2番目(デフォルト)のルートを維持する必要があるかどうかわかりません。実際、私はそれをテストしてもテストしなくてもテストしました - 残念なことに同じネガティブな結果がありました。 – sl3dg3

関連する問題