Come faccio ad aggiungere un parametro per un'ancora / hash ad un RedirectToRouteResult?

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

  •  22-09-2019
  •  | 
  •  

Domanda

Voglio usare un RedirectToRouteResult per reindirizzare a un URL del tipo / utenti / 4 # Sintesi. Utilizzando ASP.NET MVC 1.0, non sono stato in grado di trovare un modo per farlo - ho perso

?
È stato utile?

Soluzione

Si dovrebbe costruire correttamente i percorsi nella tabella di route. Ad esempio:.

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

Altri suggerimenti

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;
    }
}

Poi si può solo creare un nuovo RouteValueDictionary (result.RouteValues) nella tua unit test per controllare il modo in cui si farebbe con un RedirectToRouteResult.

Ho avuto un problema simile, date un'occhiata qui:

Collegamento a posizione a pagina (# id) attraverso meccanismi di ASP.NET MVC?

Ho finito per creare un percorso utilizzando #.

faccio una cosa del genere sul mio sito qui . Ma non è con RedirectToRouteResult. RedirectToRouteResult non supporta tra cui una parte di ancoraggio per l'url.

È necessario costruire il link se stessi e forse anche la logica per gestire l'elaborazione della parte di ancoraggio - come ho fatto io. La mia applicazione tenta di replicare una funzionalità simile a quella dei Facebook galleria fotografica di vista. Ogni link a una pagina diversa deve avere un URL univoco, quindi per questo ho utilizzare la parte di ancoraggio. Ma coz non si traduce direttamente a un percorso devo analizzare la parte di ancoraggio del URL manualmente sulla pagina e utilizzare Ajax per caricare il contenuto appropriato. Questo è quello che volevo in modo che funziona per me.

Scarica il codice sorgente del MVC e verificare come funziona RedirectToRouteResult

Ci possono essere modi migliori, ma una semplice eredità di RedirectToRouteResult e un override ExecuteResult per consentire una parte di ancoraggio opzionale dovrebbe risolvere il problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top