Как указать название области в ссылке действия? - PullRequest
154 голосов
/ 10 января 2010

У меня есть общая мастер-страница, которую я использую из 2 разных областей в моем приложении MVC 2. На главной странице есть ссылка действия, которая в настоящее время указывает контроллер и действие, но, конечно, ссылка не работает, если я нахожусь не в той области. Я не вижу перегрузки для actionlink, который принимает параметр области, это возможно сделать?

Ответы [ 8 ]

242 голосов
/ 10 января 2010

разобрался ..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
78 голосов
/ 26 апреля 2010

С чем-то, с чем я столкнулся сразу после этого, я полагаю, что другие могут столкнуться: если вам нужно связать из области действия, не находящиеся в области, вам все равно нужно указать область как пустую строку.

Например, я переместил некоторый код MVC в область и обнаружил, что мне нужно обновить URL-адреса на главной странице, которая ссылается на другие страницы сайта.

Чтобы указать URL-адрес для чего-либо, не входящего в область, используйте

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
13 голосов
/ 27 марта 2014

Использование:

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

Примечание : 4-й параметр - передать маршрут Values, если вы передадите пустой параметр, он будет учитывать корневую структуру, а если вы передадите соответствующее значение, он будет использоваться в качестве области.

Также не забудьте использовать null или new{} в качестве 5-го параметра, поскольку передача null или new {} при создании ссылки действия не будет перегружать метод для (text,action,controller,route data) или (text,action,controller,route data,html attribute), поэтому используйте правильные метод

11 голосов
/ 14 октября 2011

В MVC2 подача area="root" у меня сработала как ниже

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
6 голосов
/ 31 октября 2014

Хороший трюк, который вы можете сделать, если вы используете область в виде View, определяет ее как переменную вверху:

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

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
4 голосов
/ 22 сентября 2012

Вот то, что я придумал как решение, позволяющее пользователю подключаться к предварительно созданным системам аутентификации.

В каждой из моих областей есть версия файла _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>
}
2 голосов
/ 04 мая 2018

Если вы не можете использовать стандартную ссылку веб-приложения, такую ​​как About, Home, Contac и т. Д. Из области. Вы меняете строки

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

от

Просмотров \ Shared_Layout.cshtml

0 голосов
/ 12 июня 2019

В моем приложении ASP Net Core я просто добавляю область к атрибутам html следующим образом:

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