SiteMap HtmlHelper ASP.NET MVC

hlasů
3

Jsem přepsat tento post, aby bylo jednodušší. Toto je kód mám (a HtmlHelper):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.CompilerServices;
using System.Web.Mvc;
using System.Text;

using System.Web.Routing;

namespace Intranet.Helpers
{
  public static class MenuHelper
  {
    private static string GetBackLink(SiteMapNode parentNode)
    {
      return <li class='li-back'><a href=' + parentNode.Url + ' title=' + parentNode.Title + '></a></li>;
    }

    public static string Menu(this HtmlHelper helper)
    {
      var sb = new StringBuilder();
      SiteMapNodeCollection siteMapNodeCollection;
      sb.Append(<ul>);
      SiteMapNode currentNode = SiteMap.CurrentNode;

      if (!SiteMap.CurrentNode.Equals(SiteMap.RootNode))
      {
        if (!SiteMap.CurrentNode.HasChildNodes)
          sb.Append(GetBackLink(SiteMap.CurrentNode.ParentNode.ParentNode));
        else
          sb.Append(GetBackLink(SiteMap.CurrentNode.ParentNode));
      }

      if (!SiteMap.CurrentNode.HasChildNodes)
        siteMapNodeCollection = SiteMap.CurrentNode.ParentNode.ChildNodes;
      else
        siteMapNodeCollection = SiteMap.CurrentNode.ChildNodes;

      foreach (SiteMapNode node in siteMapNodeCollection)
      {
        if(node.Description.Equals(hidden)) continue;

        if (node.Url.Length == 0 && node.Description.Equals(separator))
          sb.Append(<li class=\li-separator\></li>);
        else if (node.Url.Length == 0 && node.Description.Equals(heading))
          sb.Append(<li class=\li-heading\> + node.Title + </li>);
        else
        {
          if (node.HasChildNodes)
          {
            if (node.NextSibling != null)
              sb.Append(<li class=\li-sub\><a href=\ + node.Url + \> + node.Title + </a></li>);
            else
              sb.Append(<li class=\li-sub last-child\><a href=\ + node.Url + \> + node.Title + </a></li>);
          }
          else
          {
            if (node.NextSibling != null)
              sb.Append(<li><a href=' + node.Url + '> + node.Title + </a></li>);
            else
              sb.Append(<li class='last-child'><a href=' + node.Url + '> + node.Title + </a></li>);
          }
        }
      }

      sb.Append(</ul>);
      return sb.ToString();
    }
  }
}

což je pozměněnou verzi tohoto . Já používám MVC oblastmi Lib , takže nemůžu vidět, jak MvcSiteMap může pracovat s tím, jak to již funguje tak, {controller}/{action}jako tomu bylo dříve.

Řekněme, že máte stránku, jako je http://localhost/mycontroller/myactiona existuje v souboru Sitemap, pak nabídku budou generovány v pořádku. Ale říct, že jsem dělat http://localhost/mycontroller/myaction/50a zadat parametr je SiteMap generátor nebude fungovat, protože toto URL neexistuje. Tutorial nepokrývá MVC oblastmi Lib , takže řešením tohoto problému nefunguje.

Položena 02/07/2009 v 16:44
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
11

Pokladna MvcSitemap na CodePlex

Odpovězeno 08/07/2009 v 04:36
zdroj uživatelem

hlasů
5

Je čas se radovat: Change Set 24979 podporu implements oblasti.

„Definice sitemap uzly“

...

oblast | volitelný | Oblast zadané řadiče uzel by měl propojit

...

Odpovězeno 10/08/2009 v 08:33
zdroj uživatelem

hlasů
0

Tento kód vypadá trochu off-trať pro mě. Hlavní myšlenkou .NET MVC odděluje obavy, takže když naplnit objekt StringBuilder, že jste mimo mísu trochu. Co bych očekávat, že je kód vrátit kolekci všech možných uzlů, a pak jej poslat na váš názor, a to dělá skutečné HTML layouting.

Nyní je důvod, proč se nemůžete dostat ... / myaction / {id} do práce je pravděpodobně proto, že SiteMapNode není vědom své datové struktury - pouze z cest ve vaší aplikaci. Kdyby dělal to fungovat v http://mvcsitemap.codeplex.com/ snad worths podívat, ale já si myslím, že ne. Budete mít k naplnění této oblasti sami (například pro každý uzel, který má parametr, zkontrolovat, co uzel to je a nahrát všechny možné hodnoty z datového úložiště). A opět - procházet objekty zpět ze svého pomocníka třídy, ne HTML.

Odpovězeno 12/07/2009 v 01:09
zdroj uživatelem

hlasů
0

hele, v ASP.NET je SiteMap výrazně realizován rozdíl je ‚nestandardní‘ implementace v ASP.NET MVC :). Musím se rozhodnout i pro mého app jak organizovat mapa stránek. Myslím, že toto řešení je daleko, aby bylo ideální a elegantní, ale zdá se být velmi příjemné pro mě. V mé databázi zobrazení objektu, který mohu použít pro zobrazování dat z pohledu jsem, aby všechny tyto funkce plynule v zájmu komodity (I love plynně kód), takže tam není metoda, která vytváří pevný kódované cestu v dependanse z ‚‘ odkaz''. Takže to, co je odkaz ?, odkaz představuje statickou třídu se všemi svými odkazy na mých webových stránkách. Tak například kód:

http://localhost/myarea/contract/viewcontract/12

V oddíle "propojením‚‘se rozumí: Links.ContractView av mém regulátoru mám smth takto:

BaseDV.SetPageMapBasedOnLink(Links.ContractView)

av SetPageMapBasedOnLink máte přepínač, který vychází z Links hodnoty nastaví příslušný titul nebo to, co někdy budete chtít. Doufám, že jste dostal nápad, a to vám pomůže se rozhodnout!

Odpovězeno 03/07/2009 v 14:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more