Создать URL-адреса, которые используют значения по умолчанию MapRoute - PullRequest
0 голосов
/ 09 марта 2011

У меня определены следующие маршруты:

    routes.MapRoute("CategoryList_CountryLanguage", "Categories/{id}/{urlCategoryName}/{country}/{language}",
        new {
            controller = "Categories",
            action = "Details",
        });

    routes.MapRoute("CategoryList", "Categories/{id}/{urlCategoryName}",
        new {
            controller = "Categories",
            action = "Details",
            country = "US",
            language = "EN"
        });

, и я генерирую ссылки, используя:

@Html.ActionLink("desc", "Details", "Categories", new { id = item.Id, urlCategoryName = item.UrlFriendlyName}, null)

, и сгенерированные URL-адреса имеют вид: / Categories /id / friendly-name

Я хочу создать: / Категории / id / friendly-name / US / EN

без указания страны иязык в вызове ActionLink, я не могу использовать значения по умолчанию, как это?Простой обходной путь - указать эти параметры в вызовах ActionLink, но я хотел бы избежать этого, если это возможно.Я надеюсь, что первый маршрут ожидает значения, указанные в URL-адресе, в то время как второй имеет значения по умолчанию, если он не включен в URL-адрес, и будет использовать его для создания новых URL-адресов, пока не повезло, возможно ли это?

1 Ответ

0 голосов
/ 09 марта 2011

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

public static class URLHelpers {

        public static string CategoryList(this UrlHelper helper, int id, string urlFirendlyName) {
            return CategoryList(helper, id, urlFirendlyName, "US", "EN");
        }

        public static string CategoryList(this UrlHelper helper, int id, string urlFirendlyName, string country, string language)
        {
            return helper.Action("Details", "Categories", new { id, urlCategoryName = urlFriendlyName, country, language });
        }
}

Тогда, на ваш взгляд, вы бы назвали это так:

<a href="@Url.CategoryList(item.id, item.UrlFriendlyName)">Some Text</a>

Просто примечание: вам нужно добавить пространство имен вашего помощника в файл web.config в разделе страницы> пространства имен. Поэтому, если вы добавите папку «Helpers» в корень приложения MVC и поместите в нее класс UrlHelper.cs, вы добавите:

<pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>

        <add namespace="MyProject.Helpers"/>
      </namespaces>
</pages>
...