10

我想使用 RedirectToRouteResult 重定向到 /users/4#Summary 之类的 url。使用 ASP.NET MVC 1.0,我无法找到一种方法来做到这一点 - 我错过了吗?

4

5 回答 5

14

您应该在路由表中正确构建您的路由。例如。:

routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
于 2010-01-19T21:14:26.130 回答
6

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 的方式对其进行检查。

于 2012-03-20T16:04:07.580 回答
1

我有类似的问题,看看这里:

通过 ASP.NET MVC 机制链接到页面上的位置 (#id)?

我最终使用# 创建了一条路线。

于 2010-01-19T21:18:09.267 回答
0

我在我的网站上做了类似的事情。但它不是与RedirectToRouteResult. RedirectToRouteResult不支持在 url 中包含锚点部分。

您需要自己构建链接,甚至可能需要处理锚部分处理的逻辑 - 正如我所做的那样。我的应用程序尝试复制类似于 Facebook 照片库视图的功能。每个指向不同页面的链接都必须有一个唯一的 url,因此我使用锚部分。但是因为它不会直接转换为路由,我必须在页面上手动解析 url 的锚部分并使用 ajax 加载适当的内容。这就是我想要的,所以它对我有用。

于 2009-11-25T11:15:03.560 回答
0

下载MVC 的源代码并查看 RedirectToRouteResult 的工作原理

可能有更好的方法,但是 RedirectToRouteResult 的简单继承和 ExecuteResult 的覆盖以允许可选的锚部分应该可以解决问题

于 2010-01-19T12:18:44.113 回答