3

У меня есть простой карты сайта:MVCSiteMapProvider не отображается SiteMapPath

<mvcSiteMapNode title="Projects" controller="Projects" action="Index"> <!--This wraps the entire site since Projects Index is the homepage--> 
    <mvcSiteMapNode title="Projects" controller="Projects" action="Index"> 
     <mvcSiteMapNode title="Project" controller="Projects" action="Details"> 
     <mvcSiteMapNode title="Session" controller="Session" action="DetailsNew" /> 
     <mvcSiteMapNode title="Edit Session" controller="Session" action="Edit" /> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
    <mvcSiteMapNode title="My Account" controller="Account" action="ChangePassword" /> 
    <mvcSiteMapNode title="Admin" controller="Admin" action="Index" > 
     <mvcSiteMapNode title="Create User" controller="Admin" action="AddUser" /> 
     <mvcSiteMapNode title="Manage Users" controller="Admin" action="Users" /> 
    </mvcSiteMapNode> 
    </mvcSiteMapNode> 

Когда я положил @Html.MvcSiteMap().SiteMapPath() на моей странице Подробности проекта, ничего не отображается. Идеи?

ответ

3

Когда вы добавляете настраиваемое значение маршрута (другое, чем «область», «контроллер» или «действие»), вам необходимо явно указать, как его сопоставить.

По умолчанию вы должны создать узел для каждого потенциального значения ключа маршрута. Например, если у вас есть ключ маршрута с именем «id», и у вас есть записи с идентификаторами «1», «2» и «3», вам нужно будет создать узел для каждого идентификатора.

<mvcSiteMapNode title="Project 1" controller="Project" action="Details" id="1"> 
<mvcSiteMapNode title="Project 2" controller="Project" action="Details" id="2"> 
<mvcSiteMapNode title="Project 3" controller="Project" action="Details" id="3"> 

Вы уже нашли альтернативу, которая заключается в использовании сохраненныхRouteParameters. Это заставит узел всегда соответствовать ключу маршрута независимо от его значения, что обычно является идеальным решением для страниц администрирования, выполняющих операции CRUD.

<mvcSiteMapNode title="Edit Project" controller="Project" action="Edit" preservedRouteParameters="id"> 

Обычно, когда вы сделаете это, вы должны зафиксировать вверх дисплей немного, потому что это не имеет особого смысла иметь редактирования узла в меню (вы обычно выбираете редактирования из списка записей), и когда вы его выбираете, вы, как правило, хотите, чтобы узел отображал выбранную вами запись. Вы можете сделать это, используя FilteredSiteMapNodeVisibilityProvider и SiteMapTitleAttribute.

Для полной загружаемой демонстрации того, как вы обычно создавали набор операций CRUD, см. Запись в блоге под названием How to Make MvcSiteMapProvider Remember a User's Position.

 Смежные вопросы

  • Нет связанных вопросов^_^