У меня есть общая мастер-страница, которую я использую из двух разных областей в моем приложении mvc 2. На главной странице есть ссылка на действие, которая в настоящее время указывает контроллер и действие, но, конечно, ссылка не работает, если я ошибаюсь. Я не вижу перегрузки для actionlink, который принимает параметр области, можно ли это сделать?Как указать название области в ссылке действия?
ответ
Фигурные его ..
Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
Что-то я столкнулся сразу после того, что я полагаю, другие могут столкнуться: Если необходимо связать с в пределах зоны действия не в районе, вам все равно необходимо указать область как пустую строку.
Например, я переместил некоторый код MVC в область и обнаружил, что мне нужно обновлять URL-адреса на главной странице, ссылающейся на другие страницы сайта.
Чтобы указать URL к чему-то не в зоне, используйте
Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
Это очень хороший совет! Но это дает ожидаемые результаты с MVC 2 .. Небольшая коррекция - Html.ActionLink («home», «Index», new {area = «", controller = "Home"}) –
В MVC2 давая area="root"
работал для меня, как показано ниже
Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
Вот то, что я придумал, как решение позволяют пользователю связываться с предварительно построенными системами аутентификации.
Каждая из моих областей имеет версию файла _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>
}
Явное определение 'htmlAttributes:' работало очень хорошо для использования нескольких параметров. –
Использование:
Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)
Примечание: четвёртое параметр должен пройти маршрут Values
, если вы передаете пустой параметр он рассмотрит корневую структуру, и если вы пройдете соответствующее значение, он будет использовать его как область.
Также не забудьте использовать null
или new{}
в качестве 5-го параметра из-за прохождения null
или new {}
при создании ссылки действий не перегружать метод (text,action,controller,route data)
или его (text,action,controller,route data,html attribute)
так использовать правильный метод
ловкий трюк вы можете сделать если вы много используете область в представлении, определяете ее как переменную в верхней части:
@{ var awesomeArea = new { area = "Awesome" }; }
@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
Да, это хороший подход. – Ravia
AH !!! это сложный 'new {}' в конце я забываю включать! –
@ Pure.Krome - да. Ничего интуитивного в этом нет! – Jeremy