How to specify an area name in an action link?

一个人想着一个人 提交于 2019-11-27 06:14:42

Figured it out..

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

Something I ran into right after this, that I imagine others might run into: If you need to link from within an area to an action not in an area, you still need to specify the Area as empty string.

For instance, I moved some MVC code into an area, and found I needed to update urls in the master page that referenced other pages on the site.

To specify an url to something not in an area, use

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

Use:

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

Note:4th parameter is to pass route Values, if you pass an empty parameter it will consider root structure and if you pass appropriate value it use it as area.

Also do not forget to use null or new{} as the 5th parameter because passing null or new {} while creating action link will not overload method for (text,action,controller,route data) or its (text,action,controller,route data,html attribute) so use the proper method

Sreejith

In MVC2 giving area="root" worked for me as below

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

A neat trick you can do if you are using an area a lot in a View is define it as a variable at the top:

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

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

Here is what I came up with as a solution to allow a user to link to the pre-built authentication systems.

Each of my areas has a version of the _LoginPartial.cshtml file.

I probably could get the application to use a single version of the file, however I kept running into errors when trying to use a single login partial.

It is only a slight modification to the original generated loginpartial, but it seems to work well when used in specific areas.

Here is the code that gets used in all of them:

@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>
}

If you can not use standart web aplication link like About, Home, Contac etc from area. You change lines

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

from

Views\Shared_Layout.cshtml

In my ASP Net Core app, I simply add the area to the html attributes like so:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!