In ASP.NET MVC versuche ich, einen Link zu erstellen, der ein Ankertag enthält (dh den Benutzer zu einer Seite und einem bestimmten Abschnitt der Seite weiterleiten).
Die URL, die ich erstellen möchte, sollte wie folgt aussehen:
<a href="/category/subcategory/1#section12">Title for a section on the page</a>
Mein Routing ist mit dem Standard eingerichtet:
routes.MapRoute("Default", "{controller}/{action}/{categoryid}");
Die von mir verwendete Aktionslink-Syntax lautet:
<%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>
<%} %>
Meine Controller-Methode lautet wie folgt:
public ActionResult Subcategory(int categoryID)
{
//return itemList
return View(itemList);
}
Das obige gibt eine URL wie folgt korrekt zurück:
<a href="/category/subcategory/1">Title for a section on the page</a>
Ich kann nicht herausfinden, wie ich den Teil # section12 hinzufügen soll . Das Wort "Abschnitt" ist nur die Konvention, die ich zum Aufteilen der Seitenabschnitte verwende, und die 12 ist die ID der Unterkategorie, dh child.ID.
Wie kann ich das machen?
asp.net-mvc
dp.
quelle
quelle
Url
oderHtml
mit einer benutzerdefinierten Methode erweitern, die eine einfache Möglichkeit zum Hinzufügen einer Fragmentzeichenfolge enthält.Es gibt Überladungen von ActionLink, die einen Fragmentparameter annehmen . Wenn Sie "section12" als Fragment übergeben, erhalten Sie das Verhalten, nach dem Sie suchen.
Beispiel: Aufrufen der LinkExtensions.ActionLink-Methode (HtmlHelper, String, String, String, String, String, String, Objekt, Objekt) :
quelle
Html.ActionLink()
würde er in keinem Szenario funktionieren - Sie müssten die Stilsyntax verwenden[email protected]()
.Ich erinnere mich nicht, in welcher Version von ASP.NET MVC (ASP.NET MVC 3+, glaube ich) / Razor die Parameterlabeldeklaration oder wie auch immer sie heißt (Parameter: x) eingeführt wurde, aber für mich ist dies definitiv der richtige Weg Erstellen Sie eine Verknüpfung mit einem Anker in ASP.NET MVC.
Nicht einmal Ed Blackburns Antipattern-Argument aus dieser Antwort kann damit konkurrieren.
quelle
Ich habe es einfach so gemacht:
quelle
Hier ist das Beispiel aus dem wirklichen Leben
Und die Zielseite hat TABS
quelle
Meine Lösung funktioniert, wenn Sie den ActionFilter auf die Aktionsmethode Unterkategorie anwenden, solange Sie den Benutzer immer auf dasselbe Lesezeichen umleiten möchten:
http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html
Es ändert den HTML-Puffer und gibt ein kleines Stück Javascript aus, um den Browser anzuweisen, das Lesezeichen anzuhängen.
Sie können das Javascript so ändern, dass es manuell gescrollt wird, anstatt natürlich ein Lesezeichen in der URL zu verwenden!
Ich hoffe es hilft :)
quelle
Ich habe das getan und es funktioniert für die Umleitung zu einer anderen Ansicht. Ich denke, wenn Sie den #sectionLink hinzufügen, nachdem es funktioniert
quelle