W ASP.NET MVC próbuję utworzyć łącze, które zawiera znacznik kotwicy (to znaczy kieruje użytkownika do strony i określonej sekcji strony).
Adres URL, który próbuję utworzyć, powinien wyglądać następująco:
<a href="/category/subcategory/1#section12">Title for a section on the page</a>
Mój routing jest skonfigurowany ze standardem:
routes.MapRoute("Default", "{controller}/{action}/{categoryid}");
Składnia łącza akcji, której używam, to:
<%foreach (Category parent in ViewData.Model) { %>
<h3><%=parent.Name %></h3>
<ul>
<%foreach (Category child in parent.SubCategories) { %>
<li><%=Html.ActionLink<CategoryController>(x => x.Subcategory(parent.ID), child.Name) %></li>
<%} %>
</ul>
<%} %>
Moja metoda kontrolera jest następująca:
public ActionResult Subcategory(int categoryID)
{
//return itemList
return View(itemList);
}
Powyższe poprawnie zwraca adres URL w następujący sposób:
<a href="/category/subcategory/1">Title for a section on the page</a>
Nie mogę wymyślić, jak dodać część # section12 . Słowo „sekcja” jest po prostu konwencją, której używam do dzielenia sekcji strony, a 12 to identyfikator podkategorii, tj. Child.ID.
W jaki sposób mogę to zrobić?
asp.net-mvc
dp.
źródło
źródło
Url
lubHtml
za pomocą niestandardowej metody, która obejmuje prosty sposób dodawania ciągu fragmentów.Istnieją przeciążenia ActionLink, które pobierają parametr fragmentu . Przekazanie „sekcji 12” jako fragmentu zapewni ci zachowanie, którego szukasz.
Na przykład wywołanie metody LinkExtensions.ActionLink (HtmlHelper, String, String, String, String, String, String, Object, Object) :
źródło
Html.ActionLink()
nie działałby w żadnym scenariuszu - musiałbyś użyć[email protected]()
składni stylu.Nie pamiętam, w której wersji ASP.NET MVC (uważam, że ASP.NET MVC 3+) / Razor parametrlabeldeclaration lub jak to się nazywa (parametr: x) została wprowadzona, ale dla mnie jest to zdecydowanie właściwy sposób skompiluj łącze z kotwicą w ASP.NET MVC.
Nawet argument anty-wzorcowy Eda Blackburnsa z tej odpowiedzi nie może z tym konkurować.
źródło
Po prostu zrobiłem to tak:
źródło
Oto przykład z prawdziwego życia
A strona docelowa ma TABS
źródło
Moje rozwiązanie zadziała, jeśli zastosujesz ActionFilter do metody akcji Subcategory, o ile zawsze chcesz przekierować użytkownika do tej samej zakładki:
http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html
Modyfikuje bufor HTML i generuje mały fragment kodu JavaScript, aby poinstruować przeglądarkę, aby dodała zakładkę.
Możesz zmodyfikować javascript, aby ręcznie przewijał, zamiast oczywiście używać zakładki w adresie URL!
Mam nadzieję, że to pomoże :)
źródło
Zrobiłem to i działa przy przekierowaniu do innego widoku Myślę, że jeśli dodasz #sectionLink po To zadziała
źródło