mvc 2 アプリの 2 つの異なる領域から使用している共有マスター ページがあります。マスター ページには、現在コントローラーとアクションを指定するアクション リンクがありますが、もちろん、間違った領域にいる場合、リンクは機能しません。area パラメーターを取る actionlink のオーバーロードが見当たりません。
9 に答える
理解した..
Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
この直後に私が遭遇したことは、他の人が遭遇する可能性があると思います: エリア内からエリア外のアクションにリンクする必要がある場合でも、エリアを空の文字列として指定する必要があります。
たとえば、一部の MVC コードを領域に移動したところ、サイトの他のページを参照するマスター ページの URL を更新する必要があることがわかりました。
領域外のものへの URL を指定するには、次を使用します。
Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
使用する:
Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)
注:4番目のパラメーターは route をValues
渡すことです。空のパラメーターを渡すと、ルート構造が考慮され、適切な値を渡すと、それがエリアとして使用されます。
null
orを 5 番目のパラメーターとして使用することも忘れないでください。アクション リンクの作成中にorをnew{}
渡すと、またはのメソッドがオーバーロードされないため、適切なメソッドを使用してください。null
new {}
(text,action,controller,route data)
(text,action,controller,route data,html attribute)
MVC2 ではarea="root"
、以下のように私のために働いた
Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
ユーザーが事前に構築された認証システムにリンクできるようにするためのソリューションとして、私が思いついたのは次のとおりです。
私の各領域には、_LoginPartial.cshtml ファイルのバージョンがあります。
アプリケーションで単一バージョンのファイルを使用することはおそらく可能でしたが、単一ログイン パーシャルを使用しようとするとエラーが発生し続けました。
元の生成された loginpartial をわずかに変更しただけですが、特定の領域で使用するとうまく機能するようです。
これらすべてで使用されるコードは次のとおりです。
@if (Request.IsAuthenticated)
{
<text>
Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
@using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
</text>
}
else
{
<ul>
<li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
<li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
</ul>
}