Pergunta

Quero usar um redirecttorouteresult para redirecionar para um resumo de URL como /4#. Usando o ASP.NET MVC 1.0, não consegui encontrar uma maneira de fazer isso - perdi?

Foi útil?

Solução

Você deve criar suas rotas corretamente na tabela de rota. Por exemplo.:

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

Outras dicas

Urlhelper.GeraReurl inclui um parâmetro de fragmento. Eu criei um método de extensão

        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*/
            );
        }

Então eu criei uma 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;
    }
}

Em seguida, você pode apenas criar um novo roteiro (resultado.RoutEvalues) em seu teste de unidade para verificar da maneira que você faria com um redirecttorouteresult.

Eu tive um problema semelhante, dê uma olhada aqui:

Vinculando à localização na página (#ID) através dos mecanismos ASP.NET MVC?

Acabei criando uma rota usando #.

Eu faço algo assim no meu site aqui. Mas não é com RedirectToRouteResult. RedirectToRouteResult não suporta, incluindo uma parte da âncora ao URL.

Você precisa construir o link e talvez até a lógica para lidar com o processamento da parte da âncora - como eu fiz. Meu aplicativo tenta replicar a funcionalidade semelhante à das visualizações da galeria de fotos do Facebook. Cada link para uma página diferente deve ter um URL exclusivo; portanto, para isso eu uso a parte da âncora. Mas porque não se traduz direto em uma rota que eu tenho para analisar a parte da ancoragem do URL manualmente na página e usar o Ajax para carregar no conteúdo apropriado. Isso é o que eu queria para que funcione para mim.

Faça o download do Código fonte do MVC e confira como o RedirectToouteResult funciona

Pode haver maneiras melhores, mas uma simples herança de redirecttorouteresult e uma substituição de Executeresult para permitir uma parte da âncora opcional deve corrigir o problema

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top