1

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

例如[MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex")]

我们希望使用自定义可见性提供程序来隐藏 SiteMap 中的节点,如下所示

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

4

2 回答 2

2

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

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

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

Attributes = @"{ ""visibility"": ""SiteMapPathHelper,!*"", ""myCustomAttribute"": true }"
于 2014-11-12T15:46:21.173 回答
1

我发现这样做的唯一方法是创建几个自定义可见性提供程序。例如,如果您的可见性标志可能是“真”和“假”......那么您只需创建一个始终返回假的可见性提供程序。在您在代码中创建的站点地图节点中 - 指定该提供者。

如果您不想对每个属性都这样做,请创建一个从 MvcSiteMapNodeAttribute 继承的新类,该类设置适当的可见性提供程序 - 然后在适当的情况下使用它。

于 2012-12-09T19:36:51.387 回答