Custom SiteMap Provider 생성 시 URL을 http://naver.com 과 같이 가상 경로가 아닌 경우에 오류가 발생하게 됩니다.
[HttpException (0x80004005): 'http://naver.com'은(는) 올바른 가상 경로가 아닙니다.] System.Web.Util.UrlPath.CheckValidVirtualPath(String path) +11076778 System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative) +122 System.Web.StaticSiteMapProvider.AddNode(SiteMapNode node, SiteMapNode parentNode) +258
위와 같은 경우에 저는 약간의 꼼수를 써서 해결 하였습니다.
AddNode(SiteMapNode node, SiteMapNode parentNode) 를 Override하여 수정하였으며, 코드는 아래와 같습니다.
private SiteMapNode FindChildNodeByID(SiteMapNode ParentNode, string strId) { SiteMapNode smnFindNode = null; if (ParentNode != null && ParentNode.ChildNodes.Count > 0) foreach (SiteMapNode node in ParentNode.ChildNodes) { if (node.Key.Equals(strId)) { smnFindNode = node; break; } else if (node.ChildNodes.Count > 0) smnFindNode = FindChildNodeByID(node, strId); if (smnFindNode != null) break; } return smnFindNode; } protected override void AddNode(SiteMapNode node, SiteMapNode parentNode) { bool isVirture = node.Url.ToLower().StartsWith("http://"); string strId = node.Key; string strUrl = node.Url; node.Url = isVirture ? node.Url.Remove(0, 7) : node.Url; base.AddNode(node, parentNode); if (isVirture && base.RootNode != null && base.RootNode.ChildNodes.Count > 0) { SiteMapNode childNode = FindChildNodeByID(base.RootNode, strId); if (childNode != null) childNode.Url = strUrl; } }
SiteMapDataSource 사용 시 StartingNodeUrl에서 http://를 제거한 나머지 부분만 적용하게 되면, 제대로 값이 설정됩니다.
<asp:SiteMapDataSource runat="server" ID="smdsAdministration" SiteMapProvider="SqlSiteMapProvider" StartingNodeUrl="naver.com" />
2011/04/04 - [Developer/[.NET] C#] - Asp.net Create Custom Sql Sitemapprovider Sample
감사합니다.
'Developer' 카테고리의 다른 글
Sharepoint 2010 Deploying Resource File in an App_GlobalResources (0) | 2011.04.05 |
---|---|
Asp.net Create Custom Sql Sitemapprovider Sample (0) | 2011.04.04 |
Sharepoint 2010 Script Resource(다국어) 처리 방법 (0) | 2011.04.01 |
[어셈블리 바인딩 로깅이 꺼져 있습니다.] 어셈블리 바인딩 로깅 시작 방법 (2) | 2011.03.30 |
Text & Image Watermark with C# (이미지 워터마크 만들기) (0) | 2011.03.29 |