2008-08-01 44 views
29

Có ai có kinh nghiệm tạo ra Nhà cung cấp bản đồ trang web dựa trên SQL dựa trên SQL không?Bản đồ trang web ASP.NET

Tôi có tệp XML mặc định web.sitemap hoạt động đúng với Trình đơn của tôi và Điều khiển SiteMapPath, nhưng tôi sẽ cần một cách để người dùng tạo trang và sửa đổi trang động.

Tôi cần phải ràng buộc quyền xem trang vào hệ thống thành viên tiêu chuẩn ASP.NET.

+1

Vui lòng chọn câu trả lời hay nhất, cảm ơn. – mruanova

Trả lời

10

Phiên bản Jeff Prosise từ tạp chí MSDN hoạt động khá tốt, nhưng nó có một vài sai sót:

AddNode freaks ra với các liên kết đến các trang web bên ngoài vào thực đơn của bạn (www.google.com, vv)

Dưới đây là sửa chữa của tôi trong BuildSiteMap():

SiteMapNode node = GetSiteMapNodeFromReader(reader); 
string url = node.Url; 
if (url.Contains(":")) 
{ 
    string garbage = Guid.NewGuid().ToString(); // SiteMapNode needs unique URLs 
    node.Url = "~/dummy_" + garbage + ".aspx"; 
    AddNode(node, _root); 
    node.Url = url; 
} 
else 
{ 
    AddNode(node, _root); 
} 

SQLDependency bộ nhớ đệm là mát mẻ, nhưng nếu bạn không muốn thực hiện một chuyến đi đến mọi DB tải thực đơn của bạn (để kiểm tra xem nếu phụ thuộc đã thay đổi) và bạn menu don không thay đổi thường xuyên, vậy tại sao không sử dụng HttpRuntime.Cache để thay thế?

public override SiteMapNode RootNode 
{ 
    get 
    { 
     SiteMapNode temp = (SiteMapNode)HttpRuntime.Cache["SomeKeyName"]; 
     if (temp == null) 
     { 
      temp = BuildSiteMap(); 
      HttpRuntime.Cache.Insert("SomeKeyName", temp, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration); 
     } 
     return temp; 
    } 
} 
Các vấn đề liên quan