Як вказати назву області у посиланні дії?


156

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

Відповіді:


245

Зрозумів це ..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})

3
@ Pure.Krome - так. Нічого інтуїтивного в цьому немає!
Джеремі

3
Переконайтесь, що перед або після ім'я області немає пробілу. Інакше це просто проігнорує ... а потім змусить за чотири години замислюватися, що не так ... як і я.
Пьотр Кула

Як ви додаєте параметри туди?
Йорро

Як це виглядає в перекладі на посилання? Я маю на увазі - коли форма надається та повертається клієнту.
FrenkyB

79

Щось, з чим я стикався після цього, на що я думаю, що можуть зіткнутися інші: Якщо вам потрібно зв’язати з області певну дію, а не в зоні, вам все одно потрібно вказати область як порожній рядок.

Наприклад, я перемістив деякий код MVC в область, і виявив, що мені потрібно оновити URL-адреси на головній сторінці, на яку посилаються інші сторінки на сайті.

Щоб вказати URL на щось, що не знаходиться в даній області, використовуйте

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

4
Це дуже гарна порада! Але це дає не очікувані результати з MVC 2 .. Невелика корекція - Html.ActionLink ("домашній", "індекс", новий {area = "", контролер = "додому"})
Олександр Білецький

15

Використання:

 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)використання, тому використовуйте належний метод


11

У MVC2 давання area="root"працювало для мене, як показано нижче

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})

6

Акуратний трюк, який ви можете зробити, якщо ви багато використовуєте область у представленні, визначте його як змінну вгорі:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

4

Ось що я придумав як рішення, щоб дозволити користувачеві здійснювати посилання на попередньо вбудовані системи аутентифікації.

Кожен з моїх областей має версію файлу _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:дуже добре працювали для використання декількох параметрів.
Травіс J

2

Якщо ви не можете використовувати стандартне посилання для веб-заявок, як-от About, Home, Contac тощо з області. Ви змінюєте лінії

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

з

Перегляди \ Shared_Layout.cshtml


1

У своєму додатку ASP Net Core я просто додаю область до таких атрибутів html:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

0

Використання

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

Досягнеш того, що ти шукаєш.

DisplayText - це те, що відображатиметься (Те саме, що <a href="#">DisplayText</a>), ActionName - це метод, який викликається в контролері, а ControllerName - це, очевидно, контролер, на який ви хочете зателефонувати! Наступний параметр - "Значення маршруту", де ви додали б свою область. Якщо ви зараз перебуваєте в районі і хочете, Home/Indexнаприклад, повернутися до свого кореня , це значення залишиться як порожній рядок, наприклад new { area = ""}. Остаточне значення - "Атрибути Html", і там, де ви хотіли б додати клас, якщо хочете, і ви маєте бути, nullякщо у вас немає атрибутів для додавання. Але як останній параметр розглядається як "атрибути Html"; щоб визначити значення маршруту, це повинно бутиnull

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.