Как указать атрибут видимости MVC SiteMaps с помощью атрибута на основе кода?
Я использую последний пакет Nuget провайдера MVC SiteMap. Мы интенсивно используем основанные на коде атрибуты, определяющие узлы на нашем сайте.
Например [MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex")]
Мы хотим использовать пользовательский поставщик видимости, чтобы скрыть узлы от SiteMap, как здесь
Однако мы не можем указать атрибут видимости узла, используя узлы на основе кода? Есть ли в любом случае, чтобы сделать это. Мы можем указать только пользовательский поставщик видимости, и мы предпочитаем использовать атрибут visible.
2 ответа
Видимость - это пользовательский атрибут, поэтому его необходимо указать в поле "Атрибуты", чтобы использовать его вместе с [MvcSiteMapNodeAttribute]. Единственная сложность в том, что атрибуты.NET не поддерживают типы словарей, поэтому вам нужно указывать атрибуты в виде экранированной строки JSON.
[MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex", Attributes = @"{ ""visibility"": ""SiteMapPathHelper,!*"" }")]
ПРИМЕЧАНИЕ. Если вам нужно указать несколько пользовательских атрибутов, разделите их запятой.
Attributes = @"{ ""visibility"": ""SiteMapPathHelper,!*"", ""myCustomAttribute"": true }"
Единственный способ сделать это - создать несколько пользовательских провайдеров видимости. Например, если ваш флаг видимости может быть "истина" и "ложь".... тогда вы просто сделаете провайдера видимости, который всегда возвращает ложь. В узлах карты сайта, которые вы создаете в коде, укажите этого провайдера.
Если вы не хотите делать это для каждого атрибута, создайте новый класс, который наследуется от MvcSiteMapNodeAttribute, который устанавливает надлежащий поставщик видимости, - затем используйте его там, где это необходимо.