2008-09-19 13 views

Odpowiedz

29

Znalazłem to pytanie, szukając tej samej odpowiedzi ... wszyscy: mówi: jest to możliwe, ale nikt nie daje rzeczywistego rozwiązania! I wydaje się, że to działa teraz tak myślałem, że będę pisać moje wyniki ...

Czego potrzeba:

My zakończeniu Masterpage.master ma następującą head tag:

<head runat="server"> 
    <script type="text/javascript" src="/script/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript" src="/script/superfish.js"></script> 
    <link href="~/css/superfish.css" type="text/css" rel="stylesheet" media="screen" runat="server" /> 
    <script type="text/javascript"> 

     $(document).ready(function() { 
     $('ul.AspNet-Menu').superfish(); 
     }); 

</script> 
</head> 

który jest w zasadzie wszystkie rzeczy potrzebne do menu jQuery Superfish do pracy. Wewnątrz strona (gdzie menu idzie) wygląda następująco (na podstawie these instructions):

<asp:SiteMapDataSource ID="SiteMapDataSource" runat="server" 
    ShowStartingNode="false" /> 
<asp:Menu ID="Menu1" runat="server" 
    DataSourceID="SiteMapDataSource" 
    Orientation="Horizontal" CssClass="sf-menu"> 
</asp:Menu> 

Na podstawie dokumentacji, to wydaje się, że powinno działać - ale tak nie jest. Powodem jest to, że CssClass="sf-menu" zostanie nadpisany, gdy Menu zostanie wyświetlone, a znacznik <ul> otrzyma numer class="AspNet-Menu". Pomyślałem, że linia pomoże, ale tak się nie stało.

jeszcze jedno

Chociaż jest to hack (i proszę ktoś mi punkt do prawidłowego rozwiązania) udało mi się dostać to działa otwierając przeszukiwanie superfish.css pliku i i zastąpienieSF- menu z AspNet-Menu ... i voila! pojawiło się menu. Myślałem, że będzie jakieś ustawienie konfiguracyjne w sterowaniu asp:Menu, gdzie mogę ustawić klasę <ul>, ale nie znalazłem żadnych wskazówek za pośrednictwem google.

+0

Fantastyczne! Szukałem odpowiedzi od pierwszego zadania tego pytania. –

+0

Załadowałem przykładowy projekt z wszystkimi wymaganymi plikami tutaj http://conceptdevelopment.net/Fun/Superfish – Conceptdev

+0

Jeśli chodzi o klasy CSS, masz rację, że nie można ich konfigurować. Nazwy klas są zakodowane na stałe w kodzie CSSFriendly. Możesz pobrać źródło, zmodyfikować klasy i odbudować biblioteki DLL, jeśli naprawdę chcesz, ale myślę, że twoja droga jest znacznie prostsza. –

0

Kontrolka SiteMapDataSource powinna być w stanie powiązać dowolny hierarchiczny kontroler związany z danymi. Nie jestem zaznajomiony z superfish, ale wiem, że istnieje wiele formantów jQueryish, aby to zrobić.

2

Wygląda na to, że trzeba wygenerować UL dla Superfish. Powinieneś być w stanie to zrobić z ASP.Net z mapy witryny. Myślę, że kontrola mapy witryny zrobi coś takiego. Jeśli nie, powinno być dość banalnie, aby wywołać mapę witryny bezpośrednio z C# i programowo wygenerować DOM. Możesz zbudować kontrolę użytkownika, aby to zrobić, lub zrobić to na stronie wzorcowej.

Sprawdź, jak this MSDN article programowo wyliczyć węzły na mapie witryny.

3

Tak, jest to całkowicie możliwe.

Użyłem go z ASP: Sterowanie menu i jQuery 1.2.6 z wtyczką Superfish. Uwaga, będziesz potrzebować ASP.NET 2.0 CSS Friendly Control Adapters.

Program ASP.NET generuje kontrolkę ASP: Menu jako układ tabeli. Adapter CSS Friendly Control sprawi, że ASP.NET będzie generował kontrolkę ASP: Menu jako układ UL/LI wewnątrz elementu div.

Umożliwi to łatwą integrację wtyczki jQuery i Superfish, ponieważ wtyczka Superfish opiera się na układzie UL/LI.

1

Pamiętaj, aby dodać klasy css dla elementów NonLink. Superfish elementów css nie accement dla nich. A jeśli jesteś podobny do mnie i masz menu root, które nie są linkami, to strasznie. Wystarczy dodać elementy AspNet-Menu-NonLink do pliku superfish.css i powinien on być renderowany poprawnie.

0

I stworzył schludny mały przykładowy projekt można wykorzystać w http://simplesitemenu.codeplex.com/

Jest to kompozyt kontrola który generuje zagnieżdżone UL/li wpis z witryny.

Ciesz się!