Как указать имя области в ссылке действия?
У меня есть общая главная страница, которую я использую из 2 разных областей в моем приложении mvc 2. На главной странице есть ссылка, в настоящее время можно указать контроллер и действие, но, конечно, ссылка не работает, если я в неправильном районе. Я не вижу перегрузки для actionlink, который принимает параметр area, можно ли это сделать?
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 файл.
Я, вероятно, мог бы заставить приложение использовать одну версию файла, однако я продолжал работать с ошибками при попытке использовать один вход частичный.
Это всего лишь небольшая модификация исходного сгенерированного loginpartial, но он, кажется, хорошо работает при использовании в отдельные области.
вот код, который используется во всех из них:
@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> }
Если вы не можете использовать стандартную ссылку веб-приложения, например, About, Home, Contac и т. д. Из области. Вы меняете строки
@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})С
Views\Shared_Layout.cshtml
Comments