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