Como adiciono um parâmetro para uma âncora/hash a um redirecttorouteresult?
-
22-09-2019 - |
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?
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