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



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

540   7  

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

    Ничего не найдено.