生成使用MapRoute默认值的URL

时间:2011-03-09 00:09:30

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

我定义了这些路线:

    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)

并且生成的网址格式如下: 的 /分类/ ID /友好名称

我想生成: /分类/ ID /友好名称/ US / EN

无需在ActionLink调用中指定国家/地区和语言,我不能使用这样的默认值吗? 简单的解决方法是在ActionLink调用中指定这些参数,但我想尽可能避免这种情况。我的希望是第一个路由需要在url中指定的值,而第二个路由在未包含在url中时具有默认值,并且会使用它来创建新的URL,到目前为止没有运气,这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个名为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>

请注意:您需要在页面&gt;中将助手的命名空间添加到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>