【问题标题】:How do I specify an MVC SiteMaps Visibility attribute using Code based attribute?如何使用基于代码的属性指定 MVC SiteMaps Visibility 属性?
【发布时间】:2012-09-29 05:22:01
【问题描述】:

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

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

我们希望根据here 使用自定义可见性提供程序来隐藏 SiteMap 中的节点

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这就是我最终采用的方法。谢谢
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这行得通。如何为 Root 节点指定属性?这必须在 XML 配置中。
    • 如果您将MvcSiteMapProvider_EnableSitemapsXml设置为false,您可以将MvcSiteMapNodeAttribute用于主页并从项目中删除Mvc.sitemap文件(和MvcSiteMapSchema.xsd文件)。
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多