我正在建立一个网上商店,我对一些网址有点问题。
我的数据库中有一个大型的部门和类别目录,用于构建我的主菜单。
网址的格式为应用/商店/部门/类别 (所有商店URL都被重写为store.aspx?Querystringstuff)
问题是我的代码生成的一些网址有效,但阻止了网页的CSS正常加载。
具体是源文本包含斜杠的URL。 我当然是编码源文本的URL,但我仍然遇到问题。
我的css链接在母版页中 -
<link rel="stylesheet" type="text/css" href="~/CSS/Layout.css" runat="server">
有效的示例链接
制冰机
http://localhost:1079/ABCWeb/Store/Refrigeration+Equipment/Ice+Machines.aspx
Steam Table Pans
http://localhost:1079/ABCWeb/Store/Catering+%26+Buffet/Steam+Table+Pans.aspx
中断的示例链接 -
餐巾架/分配器
http://localhost:1079/ABCWeb/Store/Tabletop/Napkin+Holders%2fDispensers.aspx
蝾/ Cheesemelters
http://localhost:1079/ABCWeb/Store/Cooking+Equipment/Salamanders%2fCheesemelters.aspx
如果重要的是我的构建网址的代码 - 该数组包含路径中的项目数组 第一个元素未编码,因为它包含当前存储路径。
private static System.Text.StringBuilder AppendAnchor(this System.Text.StringBuilder str, string[] path)
{
return str.Append("<a href='")
.Append(path.Aggregate((a, b) => a + "/" + HttpUtility.UrlEncode(b)))
.Append(".aspx'><span>")
.Append(HttpUtility.HtmlEncode(path[path.Length-1]))
.Append("</span></a>");
}
感谢您的帮助!
答案 0 :(得分:2)
尝试使用相对于网络根目录的路径来包含样式表。在ASP .NET webforms中执行此操作的简单方法是在服务器端控件上使用〜,例如。
<link rel="Stylesheet" type="text/css" href="~/Css/MyCssFile.css" runat="server" />
然后,ASP.NET应该为您解析正确的URL,无论URL是什么。
答案 1 :(得分:0)
我看得更远了 - “〜”实际上似乎是问题发生的地方。
链接工作正常,但我认为服务器在生成相对路径时没有正确解析...
以下是工作链接上生成的代码的css链接
../../CSS/Layout.css
以下是相同深度的损坏页面上的css链接
../../../CSS/Layout.css"
这是一个非常难看的修复工作 - 不确定是否有更好的方法
<link rel="stylesheet" type="text/css" href="<%=Request.ApplicationPath+"/Css/Layout.css" %>" />
奇怪的是,站点地图中类似路径生成的导航链接工作正常。当它从站点地图生成路径并且不尝试构建相对路径时,它可能更好地理解完全hierchy。