我们的 website.sitemap 文件中有以下内容
<siteMapNode url="~/admin/NewSub.aspx" title="New Subs" > <siteMapNode url="~/admin/Request.aspx" title="Request Details" queryStringToInclude="rid"> <siteMapNode url="~/admin/Preview.aspx" title="Preview" queryStringToInclude="rid"/> <siteMapNode url="~/admin/EditRequest.aspx" title="Edit Request" queryStringToInclude="rid"/> </siteMapNode> </siteMapNode> <siteMapNode url="~/admin/Notices.aspx" title="Notices"> <siteMapNode url="~/admin/RequestDetails.aspx" title="Request Details" queryStringToInclude="rid"> </siteMapNode> </siteMapNode>
我需要包含两次 RequestDetail.aspx,因为有两种方法可以访问同一页面,但这样做会导致重复错误,在不同的节点中不能有相同的 url。所以我将第二个更新为 url="~/admin/RequestDetails.aspx?id=1" 和 queryStringToInclude="id,rid"
我们正在使用 CustomProvider,因为我们需要查询字符串来附加到站点地图中的值。有没有办法得到它,以便在 SmartSiteMapProvider_SiteMapResolve 方法中代码知道要选择哪一个。我们最初有:
SiteMapNode temp = null; temp = SiteMap.Providers["SiteMap"].CurrentNode.Clone(true);
但这总是会导致“New Subs”成为当前节点,我更新了代码以包括以下检查:
if (HttpContext.Current.Request.QueryString["id"] != null) { temp = SiteMap.Providers["SiteMap"].FindSiteMapNodeFromKey("/testapp/admin/requestdetails.aspx?id=1").Clone(true); }
这似乎可行,但它对特定网址的检查进行了硬编码,有没有更好的方法来做到这一点?