Mam wspólną stronę wzorcową, której używam z 2 różnych obszarów w mojej aplikacji mvc 2. Strona wzorcowa zawiera link akcji, który aktualnie określa kontroler i działanie, ale oczywiście link nie działa, jeśli znajduję się w niewłaściwym miejscu. Nie widzę przeciążenia dla actionlink, który pobiera parametr area, czy można to zrobić?Jak określić nazwę obszaru w łączu akcji?
Odpowiedz
Zdobione ..
Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
Coś wpadłem zaraz po tym, że inni mogą sobie wyobrazić napotkasz: Jeśli trzeba połączyć ze obrębie obszaru działania, które nie w obszarze, ty nadal trzeba 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 się do innych stron w witrynie.
Aby określić adres URL do czegoś nie w obszarze, należy
Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
To bardzo dobra wskazówka! Ale daje nieoczekiwane wyniki z MVC 2. Mała korekta - Html.ActionLink ("home", "Index", new {area = "", controller = "Home"}) –
W MVC2 dając area="root"
pracował dla mnie jak poniżej
Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
Oto co wymyśliłem jako rozwiązanie umożliwić użytkownikowi połączenie z gotowymi systemami uwierzytelniającymi.
Każdy z moich obszarów ma wersję pliku _LoginPartial.cshtml.
Prawdopodobnie mógłbym pobrać aplikację, aby użyć jednej wersji pliku, jednak ciągle napotykałem błędy podczas próby użycia pojedynczego logowania częściowego.
To tylko niewielka modyfikacja oryginalnej wygenerowanej strony logowania, ale wygląda na to, że działa dobrze, gdy jest używana w określonych obszarach.
Oto kod, który zostanie użyty w każdym 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>
}
Jawnie ustawienie 'htmlAttributes:' działało bardzo dobrze za używanie wielu parametrów. –
Zastosowanie:
Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)
Uwaga: 4 parametr jest przejść trasą Values
, jeśli przejdą pusty parametr rozważy strukturę korzenia i jeśli przekażesz odpowiednią wartość, użyje go jako obszaru.
Również nie zapomnij użyć null
lub new{}
jako 5th parametru ponieważ przechodząc null
lub new {}
podczas tworzenia linku nie spowoduje przeciążenia metody (text,action,controller,route data)
lub jego (text,action,controller,route data,html attribute)
więc używać właściwej metody
Zgrabny sztuczki można zrobić jeśli korzystasz z obszaru dużo w widoku to zdefiniuj go jako zmienną u góry:
@{ var awesomeArea = new { area = "Awesome" }; }
@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
- 1. Biorąc pod uwagę nazwę akcji htmlHelper +, jak określić nazwę kontrolera?
- 2. Obszary ASP.NET MVC: jak ukryć nazwę obszaru w adresie URL?
- 3. Jak określić nazwę w mailu Django?
- 4. Jak uzyskać nazwę akcji z kontrolera podstawowego?
- 5. Jak programistycznie znaleźć nazwę obszaru/modułu w Ruby on Rails?
- 6. W clojure, jak mogę uzyskać nazwę bieżącego obszaru nazw?
- 7. Jak programowo określić nazwę CKEditor przykład
- 8. Jak uzyskać nazwę kontrolera i akcji w programie OnActionExecuting?
- 9. Jak * ngIf na łączu routera?
- 10. Przekierowanie z akcji jednego obszaru do akcji w "root" - czy to prawda?
- 11. W AngularJS, jak opcjonalnie zawijać element w łączu
- 12. Jak używać HAML w łączu dynamicznym?
- 13. Jak określić nazwę tabeli w klasie Fluent NHibernate ClassMap?
- 14. Jak określić nazwę instancji LocalDb w skrypcie SQL?
- 15. Jak określić nazwę schematu podczas działania "syncdb" w django?
- 16. Jak określić nazwę prototypu definicji kroku w Intellij Idea?
- 17. ASP.NET MVC - Pobierz bieżący kontroler i nazwę akcji w pomocniku
- 18. Czy można określić niestandardową nazwę czcionki Google?
- 19. Pobierz nazwę obszaru w widokach czasu renderowania na Biczerze ASP.NET MVC3
- 20. Przerwana linia na łączu wygląda na ciągłą
- 21. Zwiększenie obszaru wokół obszaru wykresu w ggplot2
- 22. pobierz kontrolkę i nazwę akcji w Laravel 4
- 23. Hbase: Jak określić nazwę hosta dla Hbase master
- 24. Jak określić nazwę użytkownika i hasło po naciśnięciu przycisku dokowania?
- 25. określić inną nazwę tabeli | nazwy kolumny w EF4
- 26. Ogniwo http na łączu Openfire
- 27. Jak określić OS
- 28. Przepełnienie tekstu: wielokropek na łączu
- 29. utworzyć słowo kluczowe w łączu automatycznie, globalnie
- 30. Nazwa akcji Symfony w szablonie
Tak, to jest dobre podejście. – Ravia
AH !!! to jest podstępne 'nowe {}' na końcu ciągle zapominam o tym! –
@ Pure.Krome - tak. Nic intuicyjnego w tym! – Jeremy