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

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

7 ответов

Решение

Догадаться..

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-й параметр - пройти маршрут 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>
}

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

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

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

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

от

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

С помощью

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

Добьетесь того, что вам нужно.

DisplayText - это то, что будет отображаться (То же, что и <a href="#">DisplayText</a>) ActionName - это метод, вызываемый в контроллере, а ControllerName - это, очевидно, контроллер, который вы хотите вызвать! Следующий параметр - "Значение маршрута", куда вы добавляете свою область. Если вы в данный момент находитесь в области и хотите вернуться к своему корнюHome/Index например, вы могли бы оставить значение как пустую строку, например new { area = ""}. Последнее значение - "Атрибуты Html", и где вы могли бы добавить класс, если хотите, и должно бытьnullесли нет атрибутов для добавления. Но поскольку последний параметр отображается как "Атрибуты HTML"; чтобы значения маршрута были распознаны, это должно бытьnull

Другие вопросы по тегам