MVC Sitemap Provider - Ведение параметров URL в цепочке - PullRequest
8 голосов
/ 16 июня 2011

Я использую MvcSiteMapProvider из http://mvcsitemap.codeplex.com/ для создания цепочки для моего проекта.У меня есть несколько URL-адресов, которым необходимо передать идентификатор для представления информации для соответствующего пользователя, например, http: // localhost: 52306 / Home / User? ID = 101101

Когда я перемещаюсь дальше по карте сайта (например,http: // localhost: 52306 / Home / User / Details? ID = 101101) и попробуйте использовать ссылку «хлебные крошки», чтобы вернуться на страницу «Пользователь», параметр ID потерян.Я попытался добавить атрибуты SiteMapPreserveRouteData к методам действия, но они, похоже, ничего не делают.Есть ли простой способ убедиться, что эта идентификационная информация сохранена?Я думал, что SiteMapPreserveRouteDataAttribute должен был сделать это, так что я что-то не так делаю с атрибутом?Мой метод будет выглядеть так:

[SiteMapPreserveRouteData]
public ActionResult User()
{
  //code
}

Дайте мне знать, если вам нужна дополнительная информация от меня.

Ответы [ 2 ]

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

Как я это сделал, я взял исходный источник помощника карты сайта mvc для рендеринга хлебных крошек и изменил его для обработки параметров (хотя в моем проекте мы отображаем только параметры для фильтрации и позволяем пользователю нажимать начтобы потерять другие параметры фильтрации, ниже приведена очень наивная реализация текста узла, просто пример того, как это можно сделать):

   private static string SiteMapText(this MvcSiteMapHtmlHelper helper, SiteMapNode node, string linkCssClass, IDictionary<string, object> htmlAttributes)
    {
        var extraAttributes = new StringBuilder();
        foreach (var attribute in htmlAttributes)
        {
            extraAttributes.Append(" " + attribute.Key + "=\"" + attribute.Value + "\"");
        }            

        string spanHtml;
        var paramDictionary = helper.HtmlHelper.ViewContext.RequestContext.HttpContext.Request.Params.ToDictionary();
        var queryParams = paramDictionary.Select(x => string.Format("{0}:{1}", x.Key, x.Value));

        // here you add request parameters
        var title = helper.HtmlHelper.Encode(string.Format("{0} ({1})", node.Title, string.Join(";", queryParams)));

        if (!string.IsNullOrEmpty(linkCssClass))
        {
            spanHtml = string.Format("<span><span class=\"{0}\"{1}>{2}</span>", linkCssClass, extraAttributes, title);
        }
        else
        {
            spanHtml = string.Format("<span><span{1}>{0}</span>", title, extraAttributes);
        }

        return spanHtml;
    }

Таким же образом вы можете настроить методы SiteMapLink, чтобы включить параметры запроса длятекущий узел.

0 голосов
/ 29 декабря 2011

Согласно этой теме в MVCSiteMapperProvider вы не можете использовать строки запроса.Он игнорирует строки запроса и использует только данные маршрута.

Строки запроса и MVCSiteMapper

Задумывались ли вы о создании новых маршрутов вместо использования строки запроса?

...