Comment puis-je ajouter un paramètre pour une ancre / hachage à un RedirectToRouteResult?

StackOverflow https://stackoverflow.com/questions/1796177

  •  22-09-2019
  •  | 
  •  

Question

Je veux utiliser un RedirectToRouteResult pour rediriger vers une URL comme / utilisateurs / 4 # Résumé. En utilisant ASP.NET MVC 1.0, je ne l'ai pas été en mesure de trouver un moyen de le faire - ai-je manqué

?
Était-ce utile?

La solution

Vous devez bien construire vos routes dans le tableau d'itinéraire. Par exemple:.

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

Autres conseils

UrlHelper.GenerateUrl comprend un paramètre de fragment. Je 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*/
            );
        }

Je 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 une nouvelle RouteValueDictionary (result.RouteValues) dans votre test unitaire pour vérifier la façon dont vous le feriez avec un RedirectToRouteResult.

J'ai eu un problème similaire, jetez un coup d'oeil ici:

Lier l'emplacement à la page (# id) grâce à des mécanismes ASP.NET MVC?

J'ai fini par créer un itinéraire en utilisant #.

Je fais quelque chose comme ça sur mon site . Mais ce n'est pas avec RedirectToRouteResult. RedirectToRouteResult ne prend pas en charge comprenant une partie d'ancrage à l'URL.

Vous devez construire le lien vous-même et peut-être même la logique pour gérer le traitement de la pièce d'ancrage - comme je l'ai fait. Mon application tente de reproduire une fonctionnalité similaire à celle des vues de la galerie de photos Facebook. Chaque lien vers une autre page doit avoir une URL unique, donc pour cela j'utiliser la pièce d'ancrage. Mais coz il ne se traduit pas directement à une route que je dois analyser la partie d'ancrage de l'URL manuellement sur la page et utiliser ajax pour charger le contenu approprié. Voilà ce que je voulais donc ça marche pour moi.

Télécharger le de MVC et vérifier comment fonctionne RedirectToRouteResult

Il peut y avoir de meilleures façons, mais un héritage simple de RedirectToRouteResult et une substitution de ExecuteResult pour permettre une pièce d'ancrage en option devrait résoudre le problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top