Jak określić nazwę obszaru w linku akcja?

Mam wspólną stronę wzorcową, której używam z 2 różnych obszarów w mojej aplikacji mvc 2. Strona wzorcowa zawiera łącze akcji, które obecnie określa kontroler i akcję, ale oczywiście łącze nie działa, jeśli znajduję się w niewłaściwym obszarze. Nie widzę przeciążenia dla actionlink, który pobiera parametr area, czy można to zrobić?

Author: Eilon, 2010-01-10

7 answers

Rozgryzłem to..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
 237
Author: Jeremy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-10 06:20:30

Coś, na co wpadłem zaraz po tym, jak wyobrażam sobie, że inni mogą wpaść: jeśli chcesz połączyć się z obszaru do akcji nie w obszarze, nadal musisz określić obszar jako pusty ciąg znaków.

Na przykład przeniosłem kod MVC do obszaru i stwierdziłem, że muszę zaktualizować adresy URL na stronie wzorcowej, która odnosiła się do innych stron w witrynie.

Aby podać adres url do czegoś, co nie znajduje się w obszarze, użyj

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
 78
Author: Frank Schwieterman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-21 04:31:29

Użycie:

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

Notatka: 4. parametr ma przekazać route Values, jeśli przekażesz pusty parametr, będzie on brany pod uwagę strukturę korzenia, a jeśli przekażesz odpowiednią wartość, użyje go jako obszaru.

Nie zapomnij również użyć null lub new{} jako piątego parametru, ponieważ przekazanie null lub new {} podczas tworzenia action link nie przeciąży metody (text,action,controller,route data) lub jej (text,action,controller,route data,html attribute), więc użyj odpowiedniej metody

 13
Author: Subhash Rao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 08:22:41

W mvc2 daje area="root" pracował dla mnie jak poniżej

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
 10
Author: Sreejith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 15:32:38

Fajną sztuczką, którą możesz zrobić, jeśli używasz obszaru w widoku, jest zdefiniowanie go jako zmiennej na górze:

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

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
 6
Author: dav_i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 15:32:05

Oto, co wymyśliłem jako rozwiązanie, aby umożliwić użytkownikowi połączenie z wstępnie zbudowanymi systemami uwierzytelniania.

Każdy z moich obszarów ma wersję _LoginPartial.plik cshtml.

Prawdopodobnie mógłbym dostać aplikację do korzystania z jednej wersji pliku, jednak ciągle uruchomiony na błędy podczas próby użycia pojedynczego logowania częściowe.

Jest to tylko niewielka modyfikacja oryginalnego wygenerowanego loginpartial, ale wydaje się, że działa dobrze, gdy jest używany w konkretnych miejsca.

Oto kod, który zostanie użyty we wszystkich z nich:

@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>
}
 4
Author: Anthony Hart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-22 03:53:02

Jeśli nie możesz użyć standardowego łącza aplikacji internetowej, takiego jak About, Home, Contac itp. Zmieniasz linie

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

Od

Views\Shared_Layout.cshtml

 1
Author: ErdincDonmez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 20:26:37