web-dev-qa-db-ja.com

アクションリンクでエリア名を指定する方法

Mvc 2アプリの2つの異なる領域から使用している共有マスターページがあります。マスターページには、現在コントローラーとアクションを指定するアクションリンクがありますが、間違った領域にいるとリンクは機能しません。面積パラメータを取るアクションリンクのオーバーロードはありませんが、できますか?

154
Jeremy

理解した..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
242
Jeremy

この直後に遭遇した、他の人が遭遇するかもしれないことを想像してください:エリア内からエリア外のアクションにリンクする必要がある場合、エリアを空の文字列として指定する必要があります。

たとえば、MVCコードをエリアに移動したところ、サイト上の他のページを参照しているマスターページのURLを更新する必要があることがわかりました。

エリアにないものにURLを指定するには、使用します

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
78

つかいます:

 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)ので、適切な方法を使用してください

13
Subhash Rao

MVC2で次のようにarea="root"を提供してくれました

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
11
Sreejith

ビューでエリアをたくさん使用している場合にできる巧妙なトリックは、それを上部の変数として定義することです:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
6
dav_i

これは、ユーザーが事前に構築された認証システムにリンクできるようにするためのソリューションとして思いついたものです。

私の各領域には、_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>
}
4
Anthony Hart

あなたが地域からの情報、ホーム、コンタックなどのような標準的なWebアプリケーションリンクを使用できない場合。行を変更します

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

から

Views\Shared _Layout.cshtml

2
ErdincDonmez

ASP Net Coreアプリでは、次のようにHTML属性にエリアを追加するだけです。

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })
0
Moleius