Mvc 2アプリの2つの異なる領域から使用している共有マスターページがあります。マスターページには、現在コントローラーとアクションを指定するアクションリンクがありますが、間違った領域にいるとリンクは機能しません。面積パラメータを取るアクションリンクのオーバーロードはありませんが、できますか?
理解した..
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
またはnew{}
を5番目のパラメーターとして使用することを忘れないでください。アクションリンクの作成中に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{})
ビューでエリアをたくさん使用している場合にできる巧妙なトリックは、それを上部の変数として定義することです:
@{ var awesomeArea = new { area = "Awesome" }; }
@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
これは、ユーザーが事前に構築された認証システムにリンクできるようにするためのソリューションとして思いついたものです。
私の各領域には、_LoginPartial.cshtmlファイルのバージョンがあります。
おそらく、アプリケーションにファイルの単一バージョンを使用させることができますが、単一のログインパーシャルを使用しようとすると、エラーが発生し続けました。
これは、生成された元のログイン部分に対するわずかな変更ですが、特定の領域で使用するとうまく機能するようです。
これらすべてで使用されるコードは次のとおりです。
@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>
}
あなたが地域からの情報、ホーム、コンタックなどのような標準的なWebアプリケーションリンクを使用できない場合。行を変更します
@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})
から
Views\Shared _Layout.cshtml
ASP Net Coreアプリでは、次のようにHTML属性にエリアを追加するだけです。
@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })