2

私は ASP.Net MVC4 アプリケーションを持っています。ここでは、T4MVC を使用して、ビュー内でアンカー要素を便利に生成しています。このようなもの:

@Html.ActionLink("Application 1", MVC.Application.Overview(1))

RouteConfig に 2 つのルートがあります。

routes.MapRouteLowercase(
    name: "DefaultWithId",
    url: "{controller}/{id}/{action}/{subaction}",
    constraints: new { id = @"\d+" },
    defaults: new { subaction = UrlParameter.Optional }
);

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

一部のアクションでは特定のアプリケーションへの ID が必要ですが、他のアクションはアプリケーション固有ではないため (すべてのアプリケーションを表示するページなど)、ID は必要ありません。

ルートはほとんどの場合うまく機能し、次のようなリンクを生成します。

/application/index        <-- Overview of all applications
/application/1/overview   <-- Overview of specific application

/application/1/overview私がオンになっていて、インデックスアクションに戻るアンカー要素を作成しようとすると、問題が発生します。生成されたリンクは最終的に になります/application/1/indexが、これは望ましい動作ではありません。

間違っている場合は訂正してください。ただし、ここで起こっていることは、T4MVC が現在のページのルートで使用可能なアプリケーション ID があることを認識し、その ID を使用してDefaultWithId、代わりにルートを使用できるようにすることです。 of Default、index-action への URL を生成します。

もちろん、次のような適切なアンカーを強制することもできます。

@Html.RouteLink(
     "All applications", 
     "Default", 
      new { controller = "Application", action = "Index"})

しかし、それは実際の問題ではなく、症状を治しているように感じます. また、すべてのアンカーのコンパイル時チェックの美しさを失うので、別のことをしたいと思います。

ビューでアンカーを生成するときに、T4MVC に現在のページのパラメーターを強制的に無視させる方法はありますか? または、この動作を回避するために何らかの方法でルートを変更できますか?

4

2 に答える 2

1

「T4MVC は、現在のページのルートで使用可能なアプリケーション ID があることを認識し、その ID を使用して、デフォルトの代わりに DefaultWithId ルートを使用して、インデックス アクションへの URL を生成できるようにします」

T4MVC にはそのようなスマート機能はありませんが、MVC ルーティング システムに組み込まれています。しかし、多くの T4MVC ユーザーがこれに遭遇したことがあります。さまざまな参照:

于 2013-01-14T19:41:38.657 に答える
0

idパラメータをnullにするactionメソッドを作ってみませんか。このような:

public virtual ActionResult xyz(int? id)
{
  return View();
}

渡す必要があるときはいつでもIDを渡し、それ以外の場合はそのままにします。それがあなたの問題を解決することを願っています。

于 2013-01-14T06:04:29.027 に答える