Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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 MVC RouteLink是双重编码的_Asp.net Mvc - Fatal编程技术网

Asp.net mvc MVC RouteLink是双重编码的

Asp.net mvc MVC RouteLink是双重编码的,asp.net-mvc,Asp.net Mvc,我在一个页面中定义了以下链接,该页面将基于web.config中定义的路由构建 <%= Html.RouteLink(product.DisplayName, "ShopProductNames", new {Id = product.Id, ProductName = product.DisplayName.Replace(' ', '-') }) %> 查看HtmlHelper.cs文件,第140行: internal static string GenerateUrl(str

我在一个页面中定义了以下链接,该页面将基于web.config中定义的路由构建

<%= Html.RouteLink(product.DisplayName, "ShopProductNames", new {Id = product.Id, ProductName = product.DisplayName.Replace(' ', '-') }) %>

查看HtmlHelper.cs文件,第140行:

internal static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues)
{
    RouteValueDictionary mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);

    VirtualPathData vpd = routeCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues);
    if (vpd == null) {
        return null;
    }

    string modifiedUrl = PathHelpers.GenerateClientUrl(requestContext.HttpContext, vpd.VirtualPath);
    return modifiedUrl;
}

Url由routeCollection.GetVirtualPath()方法(System.Web.Routing.dll)创建。使用,您将看到它在内部使用(System.Web.Routing.parsedulote.Bind方法)

您是否尝试过ProductName=product.DisplayName.Replace(“”“-”)而不使用Url.Encode()。路由值在RouteLink()中编码,例如“”被编码为“%20”是的,我试过了,但它仍然没有编码。另外,我正在查看MVC源代码,我跟踪了所有RouteLink调用,从我所知,没有Url编码调用。Ryan,发布您的“ShopProductNames”路由。请将该路由添加到问题OK,如果是这样的话,那么当我停止使用Url.Encode(ProductName)时,应该使用空格和符号对它们进行编码,但这种情况肯定不会发生。
routes.MapRoute(
            "ShopProductNames",
            "Shop/{productName}/p/{id}/{*nameInfo}",
            new
            {
                controller = "Product",
                action = "Detail"
            }
            );
internal static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues)
{
    RouteValueDictionary mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);

    VirtualPathData vpd = routeCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues);
    if (vpd == null) {
        return null;
    }

    string modifiedUrl = PathHelpers.GenerateClientUrl(requestContext.HttpContext, vpd.VirtualPath);
    return modifiedUrl;
}