如何使用基于代码的属性指定MVC SiteMaps Visibility属性?

时间:2012-10-08 22:44:57

标签: asp.net-mvc mvcsitemapprovider asp.net-mvc-sitemap

我正在使用MVC SiteMap提供程序的最新Nuget包。我们正在大量使用在我们网站中定义节点的基于代码的属性。

E.g。 [MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex")]

我们希望利用自定义可见性提供程序按照here隐藏SiteMap中的节点

但是,我们似乎无法使用基于代码的节点指定节点可见性属性?无论如何要做到这一点。我们只能指定自定义可见性提供程序,我们宁愿使用visible属性。

2 个答案:

答案 0 :(得分:2)

可见性是一个自定义属性,因此您需要在“属性”字段中提供它,以便将其与[MvcSiteMapNodeAttribute]结合使用。唯一棘手的部分是.NET属性不支持字典类型,因此您需要将属性作为转义的JSON字符串提供。

[MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex", Attributes = @"{ ""visibility"": ""SiteMapPathHelper,!*"" }")]

注意:如果您需要提供多个自定义属性,请用逗号分隔。

Attributes = @"{ ""visibility"": ""SiteMapPathHelper,!*"", ""myCustomAttribute"": true }"

答案 1 :(得分:1)

我发现这样做的唯一方法是创建多个自定义可见性提供程序。例如,如果您的可见性标志可能是“true”和“false”....那么您只需创建一个始终返回false的visiblity提供程序。在您使用代码创建的sitemapnodes中 - 指定该提供程序。

如果您不想对每个属性执行此操作,请创建一个继承自MvcSiteMapNodeAttribute的新类,该类设置适当的可见性提供程序 - 然后在适当的位置使用该类。