微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MVC Sitemap Provider —在面包屑跟踪中维护URL参数

如何解决MVC Sitemap Provider —在面包屑跟踪中维护URL参数

|| 我正在使用http://mvcsitemap.codeplex.com/中的MvcSiteMapProvider为我的项目创建面包屑跟踪。我有一些网址,需要传递一个ID才能为适当的用户提供信息,例如http:// localhost:52306 / Home / User?ID = 101101 当我进一步导航到站点地图时(例如http:// localhost:52306 / Home / User / Details?ID = 101101),并尝试使用面包屑链接将我带回到\“ User \”页面,即ID参数迷路了。我尝试将SiteMapPreserveRouteData属性添加到操作方法中,但是它们似乎没有做任何事情。有没有一种简单的方法可以确保保留此ID信息?我认为应该使用SiteMapPreserveRouteDataAttribute来做到这一点,所以我对这个属性做错了吗?我的方法如下所示:
[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 您是否考虑过创建一些新的路由而不是使用查询字符串?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。