2012-05-14 3 views
0

Можно ли заставить элемент управления sitemap отображать меню, когда текущее действие отсутствует в файле MVC.sitemap?MVC Sitemap отображает пустой, когда текущее действие не находится в файле Mvc.sitemap

У меня есть простой верхний nav. Когда текущее действие находится в карте сайта, вызов .Menu() отобразит правильные данные <ul><li>... Однако, если я добрался до страницы , а не в файле Sitemap, например/Home/Login, то он вообще не будет отображать ни один html (даже комментарий, просто пустое пространство). Это не вопрос [authorize]; меню прекрасно, когда я нахожусь в '/ Home/Index'.

Похоже, что он должен отображать то, что было запрошено, но просто не задано IsCurrentNode и IsNodeInPath. Вот вызов творю

<div id="main-nav"> 
    @Html.MvcSiteMap().Menu(0, true, true, 1) 
</div> 

Файл Mvc.sitemap:

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Form New Human" controller="Person" action="Create"/> 
    <!-- there is no mvcSiteMapNode for "Home" "Login" --> 
</mvcSiteMapNode> 

ответ

1

Найден путь вокруг него. По-видимому, это не встроенный метод расширения, или, по крайней мере, я не смог его найти. Вы могли бы позвонить Html.MvcSitemap().Menu(Html.MvcSiteMap.Provider.RootNode,...), но я не хотел бы создавать экземпляр помощника дважды.

<div id="main-nav"> 
@{ 
    var sm = Html.MvcSiteMap(); 
    @sm.Menu(sm.Provider.RootNode, true, true, 2); // 2 levels (home, plus main nav) 
} 
</div> 

Оглядевшись в разборке, кажется, показывает, что он работает немного как это:

  • Вы действительно нужен начальный узел
  • Если вы не даете ему один, его пытается найти один на основе текущего узла
    • плюс ограничения (поиск в прямом направлении, ограничения глубины и т. д.)
    • , если вы хотите узлы от уровня 1, вы должны знать, какой уровень вы на
  • Так что возвращает нуль, начиная узел имеет нулевое значение, что означает, что помощник записывает пустую строку

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