Je veux utiliser un RedirectToRouteResult pour rediriger vers une url comme /users/4#Summary. En utilisant ASP.NET MVC 1.0, je n'ai pas réussi à trouver un moyen de le faire - ai-je manqué quelque chose ?
Réponses
Trop de publicités?UrlHelper.GenerateUrl inclut un paramètre de fragment. J'ai créé une méthode d'extension
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*/
);
}
Puis j'ai créé une 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;
}
}
Ensuite, vous pouvez simplement créer un nouveau RouteValueDictionary(result.RouteValues) dans votre test unitaire pour le vérifier comme vous le feriez avec un RedirectToRouteResult.
J'ai eu un problème similaire, jetez un coup d'œil ici :
Lien vers un emplacement sur la page (#id) par le biais des mécanismes ASP.NET MVC ?
J'ai fini par créer une route en utilisant #.
Je fais quelque chose comme ça sur mon site aquí . Mais ce n'est pas avec RedirectToRouteResult
. RedirectToRouteResult
ne permet pas d'inclure une partie d'ancre dans l'url.
Vous devez construire le lien vous-même et peut-être même la logique pour gérer le traitement de la partie ancre - comme je l'ai fait. Mon application essaie de reproduire une fonctionnalité similaire à celle des vues de la galerie de photos de Facebook. Chaque lien vers une page différente doit avoir une url unique, donc pour cela j'utilise la partie ancre. Mais comme cela ne se traduit pas directement par une route, je dois analyser la partie ancre de l'url manuellement sur la page et utiliser ajax pour charger le contenu approprié. C'est ce que je voulais et cela fonctionne pour moi.
Télécharger le code source de MVC et vérifiez comment RedirectToRouteResult fonctionne
Il existe peut-être de meilleurs moyens, mais un simple héritage de RedirectToRouteResult et une surcharge de ExecuteResult pour permettre une partie d'ancrage optionnelle devrait résoudre le problème.