mvc 3 sitemap provider - несколько путей, указывающих на один и тот же узел - PullRequest
4 голосов
/ 08 сентября 2011

Я недавно начал использовать поставщика карты сайта marteenba , потому что я не мог решить проблему маршрута с другой картой сайта, которая у меня была. Это намного лучше, чем мой предыдущий. У меня вопрос: как я могу создавать различные цепочки крошек из страниц, которые идут на одну главную страницу? Рассмотрим идею ниже:

Структура сайта

<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
       <mvcSiteMapNode title="Clients Search" controller="ClientBussiness" action="ClientSearch" description="Clients Search">
            <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
        </mvcSiteMapNode>

        <mvcSiteMapNode title="Advanced Search" controller="ClientBussiness" action="AdvancedSearch" description="Clients Advanced Search">
            <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
        </mvcSiteMapNode>

        <mvcSiteMapNode title="Another Search" controller="ClientBussiness" action="AnotherSearch" description="Clients Another Search">
            <mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
        </mvcSiteMapNode>
</mvcSiteMapNode>

В приведенном выше примере моя цепочка хлебных крошек всегда показывает узел Поиск клиентов, а не любой другой. Я не знаю, следует ли создавать разные маршруты для каждого вида поиска (я делал это на моей последней карте сайта, но, к сожалению, iis6 это не понравилось).

Я ценю вашу помощь.

EDIT

при поиске на форумах я нашел похожий вопрос. Итак, рассмотрим структуру ниже:

Home >> Search >> Contracts
Home >> Another Search >> Contracts
Home >> Advanced Search >> Contracts
Home >> Web Service Search >> Extra fields >> Contracts

1 Ответ

5 голосов
/ 12 сентября 2011

Ну, похоже, все, что мне нужно было сделать, это добавить некоторые атрибуты динамических узлов на мои контроллеры. Вы можете прочитать, как это сделать здесь . Используя пример выше, вот как это делается:

 [MvcSiteMapNodeAttribute(Title = "Search", Key = "search", ParentKey = "ContractSearch", Route = "SearchRoute")]
        [MvcSiteMapNodeAttribute(Title = "AdvancedSearch", Key = "ContractAdvSearch", ParentKey = "AdvSearch", Route = "AdvSearchRoute")]
        [MvcSiteMapNodeAttribute(Title = "AnotherSearch", Key = "ContractAnotherSearch", ParentKey = "AnotherSearch", Route = "AnotherSearchRoute")]
        public ActionResult ContractIndex()
{
   //Things to do...         
}

В приведенном выше примере каждый вид поиска будет правильно определен на пути крошки. Имейте в виду, что вы должны определить различные маршруты для каждого вида «поиска», который вы хотите использовать. Итак, если вы хотите, чтобы 3 узла указывали на один и тот же URL-адрес, каждый узел должен иметь свой собственный маршрут и свой ключ, определенный в MvcSiteMapNodeAttribute.

...