DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 在MVC下用XML實現breadcrumbs導航欄
在MVC下用XML實現breadcrumbs導航欄
編輯:XML詳解     

 本文示例源代碼或素材下載

  先看下樣子

在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

<?XML version="1.0" encoding="utf-8" ?>
<node Title="首頁" Description="潘峰的網站" Action="Index" Controller="Home">
 <node Title="簡歷" Description="在線簡歷" Action="Index" Controller="Resume">
  <node Title="Test" Description="Test" Action="Index" Controller="test">
   <node Title="inner" Description="inner" Action="Index" Controller="inner">
   </node>
  </node>
 </node>
</node>

  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<XElement> s = new Stack<XElement>();
      while (node != null)
      {
        s.Push(node);
        node = node.Parent;
      }
      //輸出breadcrumbs.可以自行修改使之符合你的要求
      while (s.Count() != 0)
      {
        node = s.Pop();
        if (UrlEqual(node))
        {
          sb.AppendLine(string.Format("<li title='{1}'>{0}</li>", node.Attribute("Title").Value, node.Attribute("Description").Value));
        }
        else
        {
          sb.AppendLine(string.Format("<li><a href='{1}' title='{2}'>{0}</a></li>", node.Attribute("Title").Value,
            Url.Action(node.Attribute("Action").Value, node.Attribute("Controller").Value),
            node.Attribute("Description").Value));
          sb.AppendLine("<span style='color:Black;font-weight:bold;'> > </span>");
        }
      }
      return sb.ToString();
    }

    /// <summary>
    /// 查找當前節點
    /// </summary>
    /// <param name="e">當前節點</param>
    /// <returns>找到返回,找不到為空</returns>
    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;
      }
    }

    /// <summary>
    /// Url是否相等
    /// </summary>
    /// <param name="e">節點</param>
    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() %>

  好了效果如下

在MVC下用XML實現breadcrumbs導航欄

  我的網站

在MVC下用XML實現breadcrumbs導航欄

在MVC下用XML實現breadcrumbs導航欄




XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved