2016-08-15 4 views
1

RouteConfig.csがデフォルトのWebアプリケーションを作成しました。ActionLinkでMapRouteのURLパラメータを考慮に入れる方法はありますか?

URLの先頭に顧客追跡IDを追加する必要があるが、存在しないときと同じ機能を維持する必要があるタスクを受け取った。顧客の追跡ID

http://localhost:60202/Home/Index //ジェネリック顧客 http://localhost:60202/Location/123/Home/Index // URLこのコード123は私の顧客は、彼が私のページへのコールを発信する場所を知っている追跡IDです。私は彼らが世界中で使用して以来、これを変更するように彼らに依頼する権限はありません。

私はこのカスタムルートでこれを達成しようとした:この場合

routes.MapRoute(
    name: "Route", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 


routes.MapRoute(
    name: "Default", 
    url: "Location/{trackingId}/{controller}/{action}", 
    defaults: new { trackingId = 0, controller = "Home", action = "Index" } 
); 

を私は上記のURLスキーマの両方で自分のアプリケーションにアクセスすることができますが、私はActionLinkBeginFormはにこれを取る作るために管理することができませんでしたアカウント。

@Html.ActionLink("Início", "Index", "Home") //this should have full URL info 

すべての場合にはifですべてのActionLinkUrl.ContentBeginFormを変更し、それらを囲むすることなく、これを達成する方法はありますか?

ナビゲーションコードごとにURLスキーマを変更せずにどうすればよいですか?

現在実装されているアプローチは、IISにフォルダを複製することです。現在は4つしかないため、近い将来には維持するのが苦痛になります。

私は理由を知りませんが、this質問に基づいて、それは箱からうまくいくはずです。

編集1

は、私が期待通りActionLink作品を作っているこれら二つのMapRouteの位置を変えるように見えます。残念ながらUrl.Contentはまだバグです。

答えて

0

まあ、恥ずかしいですが、あなたがルートを追加する順序が違いを生むようです。だから私はこれに変更しました:

routes.MapRoute(
    name: "Default", 
    url: "Location/{trackingId}/{controller}/{action}", 
    defaults: new { trackingId = 0, controller = "Home", action = "Index" } 
); 

routes.MapRoute(
    name: "Route", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

この変更で私は期待どおりに動作するようになりました。私はまだAjaxの呼び出しで使用していたUrl.Contentの問題を抱えていました。

この場合、代わりにUlr.Actionを使用する必要があります。

参考jscssはまだ2番目のMapRouteを使用しています(またはルートをまったく気にしないでください)が、これは問題ではありません。

関連する問題