我的网站表单网站(4.0)设置了UrlRouting。 当我去
时,我的面包屑出现了我的主要问题是http://Localhost/
因为它在IIS中默认为http://Localhost/default.aspx
我正在尝试避免将另一个元素添加到sitemap xml中的路径,如
<siteMapNode url="~/Home" title="Home" description="Home" aspx="default.aspx">
最好的使用方法是什么?
我试图将此添加到我的路由表&amp;使用xmlSiteMapProvider来查看我是否可以使用它(这不起作用)。
routes.MapPageRoute("IISDefault", "", "~/Default.aspx");
以下是一些信息。
Routes
routes.MapPageRoute("Default", "Home", "~/Default.aspx");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");
Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Home" title="Home" description="Home">
<siteMapNode url="~/List" title="List All" description="List All" />
</siteMapNode>
</siteMap>
XmlSiteMapProvider
/// <summary>
/// This is where the original sitemap node is overloaded. We get the proper translation from the database.
/// </summary>
/// <param name="sender">This is the sender of the event</param>
/// <param name="e">This is the event arguments</param>
/// <returns>Returns a modified SiteMapNode</returns>
/// <remarks></remarks>
public SiteMapNode SmartSiteMapProvider_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
SiteMapNode returnValue = null;
if ((SiteMap.CurrentNode == null))
{
// If we don't find a sitemap node, then we might be working with UrlRouting
returnValue = ProcessRoute(e);
}
return returnValue;
}
private SiteMapNode ProcessRoute(SiteMapResolveEventArgs e)
{
SiteMapNode returnValue = null;
System.Web.Routing.RequestContext rc = HttpContext.Current.Request.RequestContext;
if ((rc != null))
{
System.Web.Routing.RouteBase route = rc.RouteData.Route;
if ((route != null))
{
// Play with the node (Never getting here)
}
}
return returnValue;
}
编辑:我将看看是否可以操纵routeCollection以某种方式获得匹配。
答案 0 :(得分:2)
而不是:
Routes
routes.MapPageRoute("Default", "Home", "~/Default.aspx");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");
Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Home" title="Home" description="Home">
<siteMapNode url="~/List" title="List All" description="List All" />
</siteMapNode>
</siteMap>
试试这个:
Routes
routes.MapPageRoute("Default", "Home", "~/");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");
Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/" title="Home" description="Home">
<siteMapNode url="~/List" title="List All" description="List All" />
</siteMapNode>
</siteMap>
否则“〜/”和“〜/ Home”是一回事。
或者您可以保留上面的内容,并在default.aspx页面中执行类似的操作......
if(Page.RouteData.Values[0] == "default.aspx")
Response.Redirect("~/Home")
这会有效地将任何默认请求重定向到您的默认请求。
你的问题是服务器看到〜/“和”〜/ Home“是2个不同的网址,你基本上希望它们是相同的,所以你必须做出决定并决定哪一个重定向到另一个
个人如果这是我的解决方案,我将不会有“〜/ Home”的路由,我的站点地图中的基本节点看起来像这样:
<siteMapNode url="~/" title="Home" description="Home">
很明显,“http:// yourdomain /”是主页,“http:// yourdomain / Home”可以是任何东西(关于你的家,我的家,家庭甜蜜的家,我家里喜欢的东西) )“http:// adomain /”是全球所有人的主页。