Desidero utilizzare un RedirectToRouteResult per reindirizzare a un URL come/users/4 # Summary. Usando ASP.NET MVC 1.0, non sono stato in grado di trovare un modo per farlo - l'ho perso?Come si aggiunge un parametro per un anchor/hash a un RedirectToRouteResult?
risposta
Si dovrebbe costruire correttamente i percorsi nella tabella del percorso. Ad esempio .:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
Faccio qualcosa del genere sul mio sito here. Ma non è con RedirectToRouteResult
. RedirectToRouteResult
non supporta l'inclusione di una parte di ancoraggio nell'URL.
È necessario creare il collegamento da soli e forse anche la logica per gestire l'elaborazione della parte di ancoraggio, come ho fatto io. La mia applicazione prova a replicare funzionalità simili a quelle delle viste della galleria fotografica di Facebook. Ogni link a una pagina diversa deve avere un URL unico, quindi per questo uso la parte di ancoraggio. Ma perché non traduce direttamente su un percorso devo analizzare manualmente la parte di ancoraggio dell'URL sulla pagina e usare ajax per caricare il contenuto appropriato. Questo è quello che volevo, quindi funziona per me.
Scarica il source code of MVC e verificare come funziona RedirectToRouteResult
Ci possono essere modi migliori, ma una semplice eredità di RedirectToRouteResult e un override di ExecuteResult per consentire una parte facoltativa di ancoraggio dovrebbe risolvere il problema
ho avuto un problema simile, date un'occhiata qui:
Linking to location on page (#id) through ASP.NET MVC mechanisms?
ho finito per creare una rotta utilizzando #.
UrlHelper.GenerateUrl include un parametro frammento. Ho creato un metodo di estensione
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*/
);
}
Poi ho creato una classe RedirectToFragmentResult
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;
}
}
allora si può solo creare un nuovo RouteValueDictionary (result.RouteValues) nel vostro unit test per controllare il modo in cui si farebbe con un RedirectToRouteResult.
Grazie @Joel Sembra funzionare molto bene. Non è necessario però la proprietà dell'URL locale (che genera un avviso "nasconde"). Ho provato con le linee rimosse: 'UrlHelper Url pubblico {get; set;} 'e' Url = url; '- qualsiasi motivo per cui questo è lì? – Chris
L'ho usato per comodità di debug, quindi posso avere accesso a urlhelper dalla finestra di controllo, ma tu sei corretto su quella base (url.Action è l'ultima volta che viene usato e non è necessario per il test) –
- 1. Come si aggiunge un progetto a CruiseControl.NET?
- 2. Come si aggiunge un nuovo articolo a un plist?
- 3. Come si aggiunge un JToken a un JObject?
- 4. Come si aggiunge un tipo di documento a un XDocument?
- 5. Come si aggiunge un valore arbitrario a un riepilogo TensorFlow?
- 6. Come si aggiunge un elenco a un file in vim?
- 7. Come si aggiunge un commento a un criterio JSON IAM?
- 8. Come si aggiunge un metodo personalizzato a un servizio Restangular?
- 9. blender - come si aggiunge un colore a un oggetto?
- 10. Come si aggiunge un EditText a un DialogFragment?
- 11. Come si aggiunge un asterisco a un grafico a scatole per rappresentare un significato?
- 12. Qual è lo scopo del parametro "forKey" quando si aggiunge un CAAnimation a un layer?
- 13. magento aggiunge un parametro querystring a CSS e JS
- 14. Perché jQuery.ajax() aggiunge un parametro all'URL?
- 15. Come si aggiunge qualcosa come "? X = 123" a un NSURL?
- 16. WCF consumato come WebService aggiunge un parametro booleano?
- 17. Come si aggiunge GPUImage a un progetto iOS?
- 18. Come si aggiunge il testo multilinea a un UIButton?
- 19. Come si aggiunge un allegato a un'e-mail tramite System.Net.Mail?
- 20. MySQL come si aggiunge a un file con INTO OUTFILE?
- 21. come si aggiunge un'immagine a un suggerimento jquery
- 22. Come si aggiunge una classe a un @ Html.ActionLink?
- 23. Come si aggiunge browserify a un progetto yeoman?
- 24. Come si aggiunge una rotta MVC a un controller specifico?
- 25. Come si aggiunge un int a una stringa in C++?
- 26. Come si aggiunge un carattere a una stringa in OCaml?
- 27. Come si aggiunge il controllo ortografico a un JTextArea?
- 28. Come si aggiunge testo alternativo a un oggetto?
- 29. Come si aggiunge una classe a un marker Leaflet?
- 30. Come si aggiunge un evento .click() a un'immagine?
Proprio così; So di poter creare un URL da solo, ma desidero beneficiare di verifiche fortemente tipizzate nei miei test unitari quando si asserisce, ad esempio. –
vedo. beh penso che tu sia sfortunato, quindi –