千家信息网

在MVC下怎么用XML实现breadcrumbs导航栏

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,小编给大家分享一下在MVC下怎么用XML实现breadcrumbs导航栏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!先看下样子像这种导航栏(breadcrumbs)在mvc下我们来
千家信息网最后更新 2024年11月25日在MVC下怎么用XML实现breadcrumbs导航栏

小编给大家分享一下在MVC下怎么用XML实现breadcrumbs导航栏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

先看下样子

像这种导航栏(breadcrumbs)在mvc下我们来实现他。我们采用XML来实现这个功能。

1.首先做个准备,我们编写rounting规则(顺便提一句,我们要用到rounting功能,所以规则必须写正确,不然出不来喔)

代码如下

public static void RegisterRoutes(RouteCollection routes)          {              routes.IgnoreRoute("{resource}.axd/{*pathInfo}");              routes.MapRoute(               "inner",                                              // Route name               "resume/test/inner/{action}/{id}",                           // URL with parameters               new { controller = "inner", action = "Index", id = "" }  // Parameter defaults               );              routes.MapRoute(             "test",                                              // Route name             "resume/test/{action}/{id}",                           // URL with parameters             new { controller = "test", action = "Index", id = "" }  // Parameter defaults             );              routes.MapRoute(                  "Default",                                              // Route name                  "{controller}/{action}/{id}",                           // URL with parameters                  new { controller = "Home", action = "Index", id = "" },                  new { controller = "^(?!(test|inner)).*$", action = "^(?!test).*$" }              );            }

我们加了两个规则

/resume/test

和/resume/test/inner

2.编写用到的XML文件,注意是树形结构的

在models写个Navigator.xml

                                

3.编写我们的类文件来实现Navigator

在models写个navigatorHelper.cs

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Xml;  using System.Xml.Linq;  using System.Web.Routing;  using System.Web.Mvc;  using System.IO;  using System.Text;   namespace conansoft.Helpers  {      public static class MenuHelper      {          private static HttpServerUtilityBase Server = null;
  • private static HttpRequestBase Request = null;

  • private static UrlHelper Url = null;

  • private static RouteValueDictionary RouteDictionary = null;

  • public static string Navigator(this HtmlHelper helper)

  • {

  • Server = helper.ViewContext.RequestContext.HttpContext.Server;

  • Request = helper.ViewContext.RequestContext.HttpContext.Request;

  • Url = new UrlHelper(helper.ViewContext.RequestContext);

  • RouteDictionary = helper.ViewContext.RequestContext.RouteData.Values;

  • string xmlPath = Server.MapPath(Url.Content("~/Models/Navigator.xml"));

  • XDocument doc = XDocument.Load(xmlPath);

  • XElement node = FindNode(doc.Root);

  • StringBuilder sb = new StringBuilder();

  • Stack s = new Stack();

  • while (node != null)

  • {

  • s.Push(node);

  • nodenode = node.Parent;

  • }

  • //输出breadcrumbs.可以自行修改使之符合你的要求

  • while (s.Count() != 0)

  • {

  • node = s.Pop();

  • if (UrlEqual(node))

  • {

  • sb.AppendLine(string.Format("{0}", node.Attribute("Title").Value, node.Attribute("Description").Value));

  • }

  • else

  • {

  • sb.AppendLine(string.Format("{0}", node.Attribute("Title").Value,

  • Url.Action(node.Attribute("Action").Value, node.Attribute("Controller").Value),

  • node.Attribute("Description").Value));

  • sb.AppendLine(" > ");

  • }

  • }

  • return sb.ToString();

  • }

  • ///

  • /// 查找当前节点

  • ///

  • /// 当前节点

  • /// 找到返回,找不到为空

  • private static XElement FindNode(XElement e)

  • {

  • XElement result = e;

  • if (UrlEqual(e))

  • {

  • return e;

  • }

  • else

  • {

  • if (e.HasElements)

  • {

  • foreach (XElement ee in e.Elements())

  • {

  • result = FindNode(ee);

  • }

  • }

  • else

  • {

  • return null;

  • }

  • return result;

  • }

  • }

  • ///

  • /// Url是否相等

  • ///

  • /// 节点

  • private static bool UrlEqual(XElement e)

  • {

  • string url1 = Url.Action(e.Attribute("Action").Value, e.Attribute("Controller").Value).ToLower();

  • string url2 = Url.RouteUrl(RouteDictionary).ToLower();

  • return url1 == url2;

  • }

  • }

  • }

  • 解释一下我们利用xml文件来实现breadcrumbs,并且我们用action和controller来判断是否为当前路径[UrlEqual]

    在网页中加入

    <%=Html.Navigator() %>  <%=Html.Navigator() %>

    好了效果如下

    看完了这篇文章,相信你对"在MVC下怎么用XML实现breadcrumbs导航栏"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

    0