我正在爲ASP.NET MVC5項目使用MvcSiteMapProvider。我想要顯示基於preservedRouteUrlParamters的動態麪包屑。我有多所大學,每所大學都有課程。我不想列出mvc.sitemap
中的所有大學。爲MvcSiteMapProvider顯示基於preservedRouteParameters的動態麪包屑
相反的:
url: /stanford
breadcrumb: home/university
url: /stanford/course1
breadcrumb: home/university/course details
它應該看起來像:
url: /stanford
breadcrumb: home/stanford
url: /stanford/course1
breadcrumb: home/stanford/course details ...where stanford is link to /stanford
url: /mit
breadcrumb: home/mit
url: /mit/course1
breadcrumb: home/mit/course details ...where mit is link to /mit
因此,這是一個模式:
url: /{university}
breadcrumb: home/{university}
url: /{university}/{course}
breadcrumb: home/{university}/course details
這裏是mvc.sitemap
配置我:
<mvcSiteMapNode title="university" controller="Curriculum" action="UniversityDetails" preservedRouteParameters="university">
<mvcSiteMapNode title="course details" action="CourseDetails" preservedRouteParameters="university,course"/>
</mvcSiteMapNode>
這是迄今爲止的解決方案,但我不確定這是否是一種好方法。我使用title="{university}"
並檢查模式{university}
。
<mvcSiteMapNode title="{university}" controller="Curriculum" action="UniversityDetails" preservedRouteParameters="university">
<mvcSiteMapNode title="course details" action="CourseDetails" preservedRouteParameters="university,course"/>
</mvcSiteMapNode>
我使用SiteMapNodeModel.Url
來動態生成麪包屑。
public static string TitleBreadcrumb(this SiteMapNodeModel m)
{
if (m.Title.StartsWith("{") && m.Title.EndsWith("}"))
{
return m.Url.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last();
}
return m.Title;
}
然後我在SiteMapNodeModel.cshtml
顯示模板中使用上述擴展方法。
// use @Model.TitleBreadcrumb() instead of @Model.Title
<a href="@Model.Url">@Model.TitleBreadcrumb()</a>
與@Model.Description
相似。
有沒有更好的方法?
關於「編碼來自URL的值」的好處。 – hIpPy