Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将锚点/哈希的参数添加到RedirectToRouteResult?_Asp.net Mvc_Url Redirection - Fatal编程技术网

Asp.net mvc 如何将锚点/哈希的参数添加到RedirectToRouteResult?

Asp.net mvc 如何将锚点/哈希的参数添加到RedirectToRouteResult?,asp.net-mvc,url-redirection,Asp.net Mvc,Url Redirection,我想使用RedirectToRouteResult重定向到像/users/4#Summary这样的url。使用ASP.NET MVC 1.0,我一直无法找到一种方法来做到这一点——我错过了吗?我在我的网站上做了类似的事情。但它不适用于重定向路由结果RedirectToRouteResult不支持在url中包含锚定部分 您需要自己构建链接,甚至是处理锚定部分处理的逻辑——就像我所做的那样。我的应用程序尝试复制类似于Facebook照片库视图的功能。每个指向不同页面的链接都必须有一个唯一的url,因

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

我在我的网站上做了类似的事情。但它不适用于
重定向路由结果
RedirectToRouteResult
不支持在url中包含锚定部分

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

下载并查看RedirectToRouteResult的工作原理

除了对RedirectToRouteResult的简单继承和对
ExecuteResult允许一个可选的锚定部分应该解决这个问题

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

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;
    }
}

然后,您可以在单元测试中创建一个新的RouteValueDictionary(result.RouteValues),以使用RedirectToRouteResult检查它。

就是这样;我知道我可以自己构建一个URL,但我想在断言时从单元测试中的强类型检查中获益,例如。嗯,我想你运气不好,谢谢@Joel,这似乎很有效。不过,不需要本地URL属性(这会引发“隐藏”警告)。我已经用删除的行进行了测试:
public-UrlHelper-Url{get;set;}
Url=Url-有什么原因吗?我使用它是为了调试方便,这样我就可以从“监视”窗口访问urlhelper,但你对这个基数是正确的(url.Action是最后一次使用它的实时时间,不需要进行测试)