Как указать имя области в ссылке действия?

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

Ответ 1

Выяснил это.

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

Ответ 2

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

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

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

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

Ответ 3

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

 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), поэтому используйте правильные метод

Ответ 4

В MVC2, дающем area="root", работал у меня, как показано ниже

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

Ответ 5

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

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

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

Ответ 6

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

Каждая из моих областей имеет версию файла _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>
}

Ответ 7

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

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

от

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

Ответ 8

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

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