Справка: ASP.NET MVC Unicode Route сегменты неправильно упорядочены - PullRequest
0 голосов
/ 18 июля 2011

У меня очень странная проблема, допустим, у меня есть следующий маршрут

  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

обратите внимание на то, как значение элемента item стоит перед категорией, которая должна быть наоборот.

также в Global.asax не определены маршруты, кроме

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

Я все потерян на этом, я очень ценю любую помощь

1 Ответ

0 голосов
/ 18 июля 2011

Вы не предоставили достаточно контекста, чтобы позволить нам воспроизвести проблему. Вот что я попробовал и который работал как ожидалось:

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> 

Это именно то, что мы могли бы ожидать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...