Как указать название области в ссылке действия?
У меня есть общая мастер-страница, которую я использую в двух разных областях приложения 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