我想使用RedirectToRouteResult重定向到像/ users / 4#Summary这样的网址。使用ASP.NET MVC 1.0,我无法找到一种方法 - 我错过了吗?
答案 0 :(得分:12)
您应该在路由表中正确构建路由。例如:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
答案 1 :(得分:5)
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;
}
}
然后,您可以在单元测试中创建一个新的RouteValueDictionary(result.RouteValues),以便按照RedirectToRouteResult的方式进行检查。
答案 2 :(得分:1)
答案 3 :(得分:0)
我在我的网站here上做了类似的事情。但它不是RedirectToRouteResult
。 RedirectToRouteResult
不支持在网址中包含锚点部分。
您需要自己构建链接,甚至可能需要逻辑来处理锚点部分的处理 - 正如我所做的那样。我的应用程序尝试复制类似于Facebook照片库视图的功能。指向不同页面的每个链接都必须具有唯一的URL,因此我使用锚点部分。但是因为它没有直接转换为路由我必须在页面上手动解析URL的锚点部分并使用ajax加载适当的内容。这就是我想要的,所以它对我有用。
答案 4 :(得分:0)
下载source code of MVC并查看RedirectToRouteResult的工作原理
可能有更好的方法,但RedirectToRouteResult的简单继承和覆盖 ExecuteResult允许可选的锚点部分应该解决问题