이 게시물을 더 간단하게 만들기 위해 다시 작성했습니다. this의 변형 된 버전입니다SiteMap HtmlHelper ASP.NET MVC
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();
}
}
}
: 이것은 내가있어 코드 (A HtmlHelper
)입니다. 내가 MvcSiteMap이 더 이상 작동하지 않는 것처럼 보일 수 있도록 MVC Areas Lib을 사용하고 있습니다. {controller}/{action}
은 (는) 이전에 있었던 것처럼 동작합니다.
http://localhost/mycontroller/myaction
과 같은 페이지가 있는데 SiteMap에 존재한다고하면 메뉴가 제대로 생성됩니다. 그러나 내가 http://localhost/mycontroller/myaction/50
을하고 매개 변수를 지정한다고 가정하면이 URL이 없기 때문에 SiteMap 생성기가 더 이상 작동하지 않습니다. tutorial은 MVC Areas Lib을 포함하지 않으므로이 문제에 대한 해결책은 작동하지 않습니다.
내 편집을 확인하면 링크 된 문서에서 권장하는대로 HtmlHelper를 기반으로 내 메뉴가 자동 생성됩니다. 나는 당신의 번역에 기초하여 이것이 어떻게 나를 위해 개인적으로 효과가 있을지 모르겠습니다. 그러나 나는 그것의 배후에있는 생각을 볼 수있다. – Kezzer