MVC SiteMap Provider - кто-нибудь может опубликовать пример, который работает с динамическими узлами? - PullRequest
2 голосов
/ 25 августа 2011

Это очень простой сценарий:

public class StockItemController : Controller
{
    public ActionResult Index(int categoryId)
    {
    /// ...
    }
}

Примеры маршрутов:

/ StockItem? CategoryId = 1 // должен быть "Напитки" / StockItem? CategoryId = 1 // долженбыть "Обувь"

Вот сокращенная карта сайта:

  <mvcSiteMapNode title="Home" controller="Home" action="Index">    
  <mvcSiteMapNode title="Template" action="Index" controller="StockItem" dynamicNodeProvider="uTani.UI.Common.BreadCrumbCategoryProvder, Store.UI" />    

и часть класса:

public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
    {
        foreach (Category category in _repository.GetCategories())
        {
            string key = "Category" + category.Id;
            string title = category.DescriptionRU;
            DynamicNode node = new DynamicNode(key, title);
            node.RouteValues.Add("categoryId", category.Id);

            yield return node;
        }           
    }

Что этовсе, что нужно, это правильно генерировать меню сайта с помощью @Html.MvcSiteMap().Menu(), но проблема в том, что @Html.MvcSiteMap().SiteMapPath() (хлебная крошка) всегда показывает самый первый динамический узел, независимо от того, какой маршрут ...

Я не знаючто мне здесь не хватает и не хватает документации по этому вопросу. Есть ли у кого-нибудь образец или может указать, что я делаю неправильно?

Спасибо,

-Stan

Ответы [ 2 ]

1 голос
/ 10 января 2012

в папе preservedRouteParameters = "id"

0 голосов
/ 26 августа 2011

Я понял это.Не было маршрута с параметром categoryId, и ссылки были "/ StockItem? CategoryId = 1".Это сработало, но выбросило карту сайта, потому что она ожидала "/ StockItem / Category / 1", и так как никого не было, она возвращала первый узел .. Я просто изменил public ActionResult Index(int categoryId) на public ActionResult Index(int id), и все начало работать ...

-Стэн

...