帮助:ASP.NET MVC Unicode路由段被错误地排序

时间:2011-07-18 16:03:00

标签: asp.net-mvc asp.net-mvc-3 routing

我有一个非常奇怪的问题,让我们假设我有以下路线

  context.MapRoute("ImageGallery_Default", "Image-Galleries/{category}", new { controller   = "Site", action = "Images", category = UrlParameter.Optional });

现在如果类别路线值是英文,例如具有自然值,那么路线看起来会很好

http://www.mysite.com/Image-Galleries/Nature

但是如果类别路线值具有Unicode字符阿拉伯语或希伯来语,则路线变得混乱,类别路线值变为像这样的图像库

http://www.mysite.com/طبيعة/Image-Galleries 

更新1

似乎如果路线只有一个动态路线值,那么它不是问题,但更重要的是,问题开始显而易见,试试这个

public class FrontEndAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "FrontEnd"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
 context.MapRoute("ImageGallery_Item", "Image-Galleries/{category}/{item}", new {     controller = "Site", action = "ImagesItem" });
    }
}

这是我的HTML

<a  href="@Url.RouteUrl("ImageGallery_Item", new { category = "طبيعة", item = "اوروبا", id = @item.Id })">اوروبا</a>

以下是浏览器中链接的样子

http://www.mysite.com/Image-Galleries/طبيعة/اوروبا?id=16

注意项目路线值如何在hte类别之前出现,这应该是好的方式。

除了

外,Global.asax中没有定义路由
     public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
    }

我全都迷失了,我非常感谢所有的帮助

1 个答案:

答案 0 :(得分:0)

您没有提供足够的背景信息以便我们重现问题。这是我尝试过的,也是按预期工作的:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "ImageGallery_Default", 
        "Image-Galleries/{category}", 
        new { controller = "Site", action = "Images", category = UrlParameter.Optional }
    );

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

并在视图中:

@Html.RouteLink("ASCII link", "ImageGallery_Default", new { category = "nature" }) 
<br/>
@Html.RouteLink("Unicode link", "ImageGallery_Default", new { category = "طبيعة" }) 

以下是生成的HTML页面的样子:

<a href="/Image-Galleries/nature">ASCII link</a> 
<br/>
<a href="/Image-Galleries/%D8%B7%D8%A8%D9%8A%D8%B9%D8%A9">Unicode link</a> 

这正是我们所期望的。