Ich möchte ein RedirectToRouteResult verwenden, um auf eine URL wie/users/4 # Summary umzuleiten. Mit ASP.NET MVC 1.0 konnte ich keinen Weg finden, dies zu tun - habe ich es verpasst?Wie füge ich einen Parameter für einen Anker/Hash zu einem RedirectToRouteResult hinzu?
Antwort
Sie beheben sollen Erstellen Sie Ihre Routen ordnungsgemäß in der Routentabelle. ZB .:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
Ich mache so etwas auf meiner Website here. Aber es ist nicht mit RedirectToRouteResult
. RedirectToRouteResult
unterstützt nicht die Einbindung eines Ankerteils in die URL.
Sie müssen den Link selbst erstellen und vielleicht sogar die Logik, um die Verarbeitung des Ankerteils zu verarbeiten - wie ich es getan habe. Meine Anwendung versucht, ähnliche Funktionen wie in den Facebook-Fotogalerieansichten zu replizieren. Jeder Link zu einer anderen Seite muss eine eindeutige URL haben, daher verwende ich den Ankerteil. Aber weil es nicht direkt auf eine Route übersetzt, muss ich den Anker Teil der URL manuell auf der Seite analysieren und Ajax verwenden, um den entsprechenden Inhalt zu laden. Das ist, was ich wollte, also funktioniert es für mich.
die source code of MVC herunterladen und lesen Sie, wie RedirectToRouteResult arbeitet
Es kann bessere Möglichkeiten, aber eine einfache Vererbung von RedirectToRouteResult und eine Überschreibung von ExecuteResult einem optionalen Ankerteil zu ermöglichen, soll das Problem
Ich hatte ein ähnliches Problem, schauen Sie hier:
Linking to location on page (#id) through ASP.NET MVC mechanisms?
ich mit # Erstellen einer Route endete.
UrlHelper.GenerateUrl enthält einen Fragmentparameter. Ich habe eine Erweiterungsmethode
public static string Action(this UrlHelper url, string actionName, string controllerName, string fragment, object routeValues)
{
return UrlHelper.GenerateUrl(
routeName: null,
actionName: actionName,
controllerName: controllerName,
routeValues: new System.Web.Routing.RouteValueDictionary(routeValues),
fragment: fragment,
protocol: null,
hostName: null,
routeCollection: url.RouteCollection,
requestContext: url.RequestContext,
includeImplicitMvcValues: true /*helps fill in the nulls above*/
);
}
Dann habe ich eine RedirectToFragmentResult Klasse erstellt
public class RedirectToFragmentResult: RedirectResult
{
public UrlHelper Url {get;set;}
public string Action { get; set; }
public string Controller { get; set; }
public string Fragment { get; set; }
public object RouteValues { get; set; }
public RedirectToFragmentResult(UrlHelper url, string action, string controller, string fragment, object routeValues)
:base(url.Action(action, controller, fragment, routeValues))
{
Url = url;
Action = action;
Controller = controller;
Fragment = fragment;
RouteValues = routeValues;
}
}
Dann können Sie einfach eine neue Routevaluedictionary (result.RouteValues) in Ihrem Gerät zu testen schaffen es die Möglichkeit zu überprüfen, würden Sie mit ein RedirectToRouteResult.
Dank @Joel Dies scheint sehr gut zu funktionieren. Es gibt jedoch keine Notwendigkeit für die lokale URL-Eigenschaft (was eine Warnung "versteckt" ausgibt). Ich habe mit entfernten Zeilen getestet: 'public UrlHelper Url {get; set;} 'und' Url = url; '- ein Grund, warum das da ist? – Chris
Ich benutze das zum Debuggen von Bequemlichkeit, so kann ich Zugriff auf den URL-Helper aus dem Überwachungsfenster haben, aber Sie sind richtig, dass Basis (URL.Action ist die letzte Echtzeit, die es verwendet wird und es ist nicht zum Testen erforderlich) –
- 1. Wie füge ich einen Int zu einem NSDate hinzu?
- 2. Wie füge ich einen Netzwerkadapter zu einem Linux-Rechner hinzu?
- 3. Wie füge ich einen Dokumenttyp zu einem XDocument hinzu?
- 4. Wie füge ich einen Platzhalter zu einem text_field_tag hinzu?
- 5. Wie füge ich einen Kommentar zu einem XPath hinzu?
- 6. Wie füge ich einen Slot zu einem QWidget hinzu?
- 7. Wie füge ich einen Knoten zu einem Mnesia-Cluster hinzu?
- 8. Wie füge ich einen EditText zu einem DialogFragment hinzu?
- 9. SSRS - Wie füge ich einen Standardwert zu einem Parameter mit verfügbaren Werten aus einer Abfrage hinzu?
- 10. Wie füge ich einen hübschen Drucker für einen generischen Typ zu fsi hinzu?
- 11. ActionMailer - Wie füge ich einen Anhang hinzu?
- 12. SpriteKit Wie füge ich einen FixedJoint hinzu?
- 13. Wie füge ich einem SVG-Pfadelement einen Schlagschatten hinzu?
- 14. Wie füge ich einem Suchfeld im Sharepoint einen Wert hinzu?
- 15. Wie füge ich einen MIME-Typ zu .htaccess hinzu?
- 16. Wie füge ich einen gzip-Befehl zu Windows CMD hinzu?
- 17. Wie füge ich einen Hash zu * args hinzu?
- 18. Wie füge ich einen Bearbeitungsmodus zu jEdit hinzu?
- 19. Wie füge ich einen globalen Include-Pfad für xcode hinzu
- 20. Wie füge ich einen Beobachter für eine wechselnde Höhe hinzu?
- 21. Wie füge ich einen neuen persistenten Speicher für CoreData hinzu?
- 22. Wie füge ich einen Zeilenumbruch für den Lesebefehl hinzu?
- 23. Wie füge ich einen Callback für setAttribute hinzu?
- 24. Wie füge ich einen Prototyp für ein Eingabeelement hinzu?
- 25. Wie füge ich einen Include-Pfad für Kernelmodul-Makefile hinzu
- 26. Wie füge ich einen int zu einer Zeichenkette hinzu
- 27. Wie füge ich einen Wert zu einer Tabelle hinzu?
- 28. Wie füge ich einen Titel zu Seaborn Facet Plot hinzu
- 29. Wie füge ich einen Bot zu einer Telegrammgruppe hinzu?
- 30. Wie füge ich einen Etikettenhinweis zu Kartik DetailView hinzu
Das ist es gerade; Ich weiß, dass ich selbst eine URL erstellen kann, aber ich möchte zum Beispiel in meinen Unit-Tests von stark typisierten Checks profitieren. –
ich sehe. Nun, ich denke du bist kein Glück dann –