Mam udostępnioną stronę wzorcową, której używam z 2 różnych obszarów w mojej aplikacji MVC 2. Strona wzorcowa ma łącze akcji, które obecnie określa kontroler i akcję, ale oczywiście łącze nie działa, jeśli jestem w niewłaściwym obszarze. Nie widzę przeciążenia dla actionlink, który przyjmuje parametr obszaru, czy można to zrobić?
156
Coś, na co natknąłem się zaraz po tym, a wyobrażam sobie, że inni mogą napotkać: Jeśli chcesz połączyć się z działaniem spoza obszaru, nadal musisz określić obszar jako pusty ciąg.
Na przykład przeniosłem kod MVC do obszaru i stwierdziłem, że muszę zaktualizować adresy URL na stronie wzorcowej, które odwołują się do innych stron w witrynie.
Aby określić adres URL czegoś spoza obszaru, użyj
źródło
Posługiwać się:
Uwaga : czwarty parametr to przekazanie trasy
Values
, jeśli podasz pusty parametr, uwzględni strukturę root i jeśli przekażesz odpowiednią wartość, użyje go jako obszaru.Również nie zapomnij użyć
null
albonew{}
jako 5th parametru ponieważ przechodzącnull
lubnew {}
podczas tworzenia linku nie spowoduje przeciążenia metody(text,action,controller,route data)
lub jej(text,action,controller,route data,html attribute)
więc używać właściwej metodyźródło
W MVC2 dawanie
area="root"
działało jak poniżejźródło
Sprytną sztuczką, którą możesz zrobić, jeśli często używasz obszaru w Widoku, jest zdefiniowanie go jako zmiennej u góry:
źródło
Oto, co wymyśliłem jako rozwiązanie umożliwiające użytkownikowi łączenie się z gotowymi systemami uwierzytelniania.
Każdy z moich obszarów ma wersję pliku _LoginPartial.cshtml.
Prawdopodobnie mógłbym sprawić, by aplikacja używała jednej wersji pliku, jednak ciągle napotykałem błędy podczas próby użycia częściowego logowania z pojedynczym logowaniem.
Jest to tylko niewielka modyfikacja pierwotnie wygenerowanego loginu, ale wydaje się działać dobrze, gdy jest używany w określonych obszarach.
Oto kod, który jest używany we wszystkich z nich:
źródło
htmlAttributes:
działało bardzo dobrze w przypadku używania wielu parametrów.Jeśli nie możesz skorzystać ze standardowego łącza do aplikacji internetowej, takiego jak Informacje, Strona główna, Kontakt itp. Z obszaru. Zmieniasz linie
z
Views \ Shared_Layout.cshtml
źródło
W mojej aplikacji ASP Net Core po prostu dodaję obszar do atrybutów HTML w następujący sposób:
źródło
Za pomocą
Osiągnie to, czego szukasz.
DisplayText jest tym, co zostanie wyświetlone (tak samo jak
<a href="#">DisplayText</a>
), ActionName to metoda wywoływana w kontrolerze, a ControllerName jest oczywiście kontrolerem, który chcesz wywołać! Następnym parametrem jest „Wartość trasy”, gdzie można dodać obszar. Jeśli aktualnie jesteś w Obszarze i chcesz na przykład wrócić do swojego katalogu głównegoHome/Index
, zostaw wartość jako pusty ciąg, npnew { area = ""}
. Ostateczna wartość to „Atrybuty HTML” i miejsce, w którym można dodać klasę, jeśli chcesz, anull
jeśli nie masz żadnych atrybutów do dodania, powinna być to wartość . Ale ponieważ ostatni parametr jest postrzegany jako „Atrybuty HTML”; aby wartości tras były rozpoznawane, powinno to byćnull
źródło