如何添加一个参数锚/散列到RedirectToRouteResult?
-
22-09-2019 - |
题
我想使用RedirectToRouteResult重定向到像/用户/ 4#概要的URL。使用ASP.NET MVC 1.0,我一直没能找到一种方法来做到这一点? - 已我错过了
解决方案
您应该正确地构建在路由表中你的路由。例如:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
其他提示
UrlHelper.GenerateUrl包括片段的参数。我创建的扩展方法
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*/
);
}
然后创建了一个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;
}
}
然后,你可以在你的单元测试,以检查它,你会与一个RedirectToRouteResult的方式创建一个新RouteValueDictionary(result.RouteValues)。
我做了类似的东西在我的网站这里。但它不是与RedirectToRouteResult
。 RedirectToRouteResult
不支持包括锚定部分的URL。
您需要建立自己的链接,甚至逻辑来处理锚部分的处理 - 像我一样。我的应用程序试图复制功能类似于Facebook的照片库的看法。每个链接到不同的页面必须有一个唯一的网址,所以为了这个,我使用的锚部分。但怎么把它并不直接转化为路线我必须在页面和使用Ajax加载在适当的内容手动解析URL的锚部分。这就是我想要的,因此我的作品。
下载源MVC 的代码,并检查了RedirectToRouteResult如何工作
有可能是更好的方法,但RedirectToRouteResult的简单继承和的重写 的ExecuteReuslt以允许可选的锚部分应该解决该问题
不隶属于 StackOverflow