我有一个非常奇怪的问题,让我们假设我有以下路线
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}");
}
我全都迷失了,我非常感谢所有的帮助
答案 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>
这正是我们所期望的。