Quiero usar un RedirectToRouteResult para redirigir a una url como/users/4 # Summary. Usando ASP.NET MVC 1.0, no he podido encontrar una manera de hacerlo, ¿me lo he perdido?¿Cómo agrego un parámetro para un ancla/hash a un RedirectToRouteResult?
Respuesta
Usted debe construya adecuadamente sus rutas en la tabla de rutas. Ej .:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
Hago algo así en mi sitio here. Pero no es con RedirectToRouteResult
. RedirectToRouteResult
no es compatible con incluir una parte de anclaje en la url.
Necesita construir el enlace usted mismo y tal vez incluso la lógica para manejar el procesamiento de la parte de anclaje, como yo lo hice. Mi aplicación intenta replicar una funcionalidad similar a la de las vistas de la galería de fotos de Facebook. Cada enlace a una página diferente debe tener una URL única, así que para esto utilizo la parte de anclaje. Pero como no se traduce directamente a una ruta, tengo que analizar manualmente la parte de anclaje de la url en la página y usar ajax para cargar el contenido apropiado. Esto es lo que quería, así que funciona para mí.
Descargar el source code of MVC y echa un vistazo a cómo funciona RedirectToRouteResult
Puede haber mejores maneras, pero una herencia sencilla de RedirectToRouteResult y una anulación de los ExecuteResult para permitir que una parte de anclaje opcional debería solucionar el problema
que tenía un problema similar, echar un vistazo aquí:
Linking to location on page (#id) through ASP.NET MVC mechanisms?
que acabó creando una ruta utilizando #.
UrlHelper.GenerateUrl incluye un parámetro de fragmento. He creado un método de extensión
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*/
);
}
Luego he creado una clase 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;
}
}
a continuación, puedes crear una nueva RouteValueDictionary (result.RouteValues) en su unidad de prueba para comprobar que la forma en que lo haría con un RedirectToRouteResult.
Gracias @Joel Esto parece funcionar muy bien. Sin embargo, no es necesario tener una propiedad de URL local (lo que arroja una advertencia de 'oculto'). Probé con líneas eliminadas: 'UrlHelper Url pública {get; set;} 'y' Url = url; '- ¿alguna razón por la cual esto está allí? – Chris
Lo utilicé para la conveniencia de la depuración, así que puedo tener acceso al urlhelper desde la ventana del reloj, pero está en lo correcto en esa base (url.Action es la última vez que se usa en tiempo real y no es necesario probarla) –
- 1. ¿Cómo verificar qué URL hará un RedirectToRouteResult?
- 2. Cómo agrego un segue a un UIGestureRecognizer
- 3. ¿Cómo agrego un wstring?
- 4. ¿Cómo agrego un proyecto a CruiseControl.NET?
- 5. Cómo agrego propiedades personalizadas a un formulario
- 6. ¿Cómo agrego un evento OnClick a TCustomControl?
- 7. cómo agrego un int a una cadena
- 8. ¿Cómo agrego un hash a * args?
- 9. ¿Cómo agrego un dispositivo a dispositivos Xcode?
- 10. ¿Cómo agrego un tipo MIME a .htaccess?
- 11. ¿Cómo agrego un subrepo a un repositorio existente en mercurial
- 12. ¿Cómo agrego un manifiesto a un ejecutable usando mt.exe?
- 13. ¿Cómo agrego un separador a un JComboBox en Java?
- 14. ¿Cómo funciona RedirectToRouteResult?
- 15. ¿Cómo agrego un submenú a un menú existente en Magento?
- 16. licuadora: ¿cómo agrego un color a un objeto?
- 17. ¿Cómo agrego un tipo de documento a un XDocument?
- 18. ¿Cómo agrego un atributo a un elemento XmlArray (Serialización XML)?
- 19. En NetBeans ¿cómo agrego un jMenuBar a un JPanel?
- 20. ¿Cómo paso un parámetro a un informe de acceso programáticamente?
- 21. ¿Cómo agregar un parámetro a la URL?
- 22. ¿Cómo agrego un asterisco a un diagrama de caja para representar la importancia?
- 23. Pasar un evento como un parámetro a un método
- 24. ¿Cómo invocar a un delegado con un parámetro nulo?
- 25. ¿Cómo puedo enviar un parámetro a un filtro anterior?
- 26. ¿Cómo pasar un ArrayList a un parámetro de método varargs?
- 27. Eclipse: ¿Cómo agrego el paquete javax.servlet a un proyecto?
- 28. ¿Cómo agrego una imagen a un elemento en RSS 2.0?
- 29. Cómo agrego un atributo RowVersion a una clase EF4
- 30. ¿Cómo agrego una "clase" a un campo ChoiceField en Django?
Eso es todo; Sé que puedo construir una URL yo mismo, pero quiero beneficiarme de las comprobaciones de tipo fuerte en mis pruebas de unidad al afirmar, por ejemplo. –
veo. bueno, creo que no tienes suerte, entonces –