asp.net mvc 3-mvc Sitemap Provider——在breadcrumb trail中维护URL参



我正在使用http://mvcsitemap.codeplex.com/为我的项目创建一个breadcrumb跟踪。我有一些URL需要传递一个ID来为适当的用户提供信息,例如http://localhost:52306/Home/user?ID=101101

当我进一步导航到站点地图(例如http://localhost:52306/Home/User/Details?ID=101101)并尝试使用面包屑链接返回"用户"页面时,ID参数将丢失。我曾尝试将SiteMapPreserveRoutData属性添加到操作方法中,但它们似乎没有起到任何作用。有没有一种简单的方法可以确保这些ID信息得到保存?我认为SiteMapPreserveRoutDataAttribute应该这样做,那么我的属性是否有问题?我的方法是这样的:

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

如果你需要我提供更多信息,请告诉我。

我做这件事的方式,我采用了原始的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方法,以包括当前节点的请求参数。

根据MVCSiteMapperProvider上的这个线程,您不能使用查询字符串。它忽略查询字符串,只使用路线数据。

查询字符串和MVCSiteMapper

你有没有想过创建一些新的路由,而不是使用查询字符串?

相关内容

  • 没有找到相关文章

最新更新