0

レイアウト ページが~/Views/Shared/_Layout.cshtmlあり、レンダリングされるすべての通常のビューでうまく機能します。ただし、「デモ」と呼ばれる領域を作成し、~/Areas/Demos/Views/_ViewStart.cshtmlファイルで元のレイアウト ページを参照しました。

@Html.ActionLink()これは、一部の呼び出しにエリア名のプレフィックスが付けられていることを除いて、問題なく機能します。したがって、@Html.ActionLink("Blog", "Index", "Blog")通常、エリア ビューで「website.com/Blog/Index」のようなリンクが生成される場所では、「website.com/Demos/Blog/Index」が生成されます。

何か案は?

4

1 に答える 1

0

領域を使用するには、Global.asax ファイルを開き、次のコードを Application_Start メソッドに挿入します。

AreaRegistration.RegisterAllAreas();

任意の MVC アプリケーションと同様にエリア内でリンクできますが、別のエリアへのリンクを生成するには、これらのメソッドの routeValues パラメーターでターゲット エリア名を明示的に渡す必要があります。

@Html.ActionLink("Blog", "Index", "Blog", new { area = "blog" }, null)

nullパラメータが必要なのは、routeValues パラメータを持つ ActionLink メソッドのオーバーロードにも htmlAttributes パラメータがあるためだけですが、領域間をリンクできるようにするためには必須ではありません。

アップデート

RouteLink()の代わりに, を使用ActionLink()して、エリア登録をバイパスできます。

@Html.RouteLink("Blog", "MyRoute", new { action = "Index", controller = "Blog" })

2番目のパラメータ(「MyRoute」)Global.asaxは、異なるエリア間を接続するために登録されてRouteLink()いるルート名です。正しいルート名を指定するだけです。

于 2012-04-11T19:36:57.790 に答える