我定义了这些路线:
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,到目前为止没有运气,这可能吗?
答案 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>