Как указать атрибут видимости 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, который устанавливает надлежащий поставщик видимости, - затем используйте его там, где это необходимо.

Другие вопросы по тегам