10 votes

Comment ajouter un paramètre pour une ancre/hache à un RedirectToRouteResult ?

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 ?

14voto

dariol Points 1450

Vous devez construire correctement vos routes dans la table des routes. Par exemple.. :

routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });

6voto

Joel Dart Points 41

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.

1voto

Terje Points 868

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 #.

0voto

cottsak Points 5490

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.

0voto

TFD Points 10618

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X