我现在遇到一个关于ASP.NET WebForms中路由的奇怪问题。我尝试使用路由的唯一原因是为了获得更好看的URL而不是其他任何东西。此外,这是我第一次尝试实现路由。
我的目标很简单: www.domain.com/default.aspx - > www.mydomain.com/Home-Page
所以,我在global.asax
中实现了以下内容Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RegisterRoutes(RouteTable.Routes)
End Sub
和
Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.MapPageRoute("homepage", "Home-Page", "~/Default.aspx")
End Sub
然而,目标已实现,由于逻辑原因,我页面上的所有图像都消失了;
而不是找到img/someimage.png
,而是试图获得Home-Page/img/someimage.png
现在,我当然可以纠正我的图像路径,但这需要相当长的时间。我很乐意摆脱路由。
我的问题: 有没有办法阻止文件夹(图像,CSS,js等)受到路由机制的影响,只能实现很好的URL?
答案 0 :(得分:4)
您可以告诉路由忽略特定的文件类型。确保此条目位于特定路线之前。
routes.IgnoreRoute("{file}.png")
答案 1 :(得分:0)
好吧..奇怪但我似乎找到了解决方案:
首先,为了让您知道,@ DaleBurrell关于使用html标签的建议也有效。
我将导航改为:
<a id="default" href="Home/">Home</a>
到此:
<a id="default" href="<%: Page.GetRouteUrl("home", vbnull)%>" >Home</a>
基本上,我没有硬编码主导航的url,而是从global.asax中获取实际的名称值。
在全球的asax中:
Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.MapPageRoute("home", "Home", "~/Default.aspx")
End Sub
一切似乎都很好并且现在正在工作..如果有任何其他问题,我会发布在这里...
答案 2 :(得分:0)
只需在ScriptManager中添加您要排除的内容
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="jquery-1.7.1.min.js" />
<asp:ScriptReference Path="init.js" />
</Scripts>
</asp:ScriptManager>
答案 3 :(得分:0)
我遇到了这个问题......我正在实施路线,所以我的网址对于搜索引擎来说很不错......(类似categories/beans-pulses/3001
而不是products.aspx?catID=3001
)包括
routes.MapPageRoute(
"Category-Simple-Route",
"categories/{seo-catName}/{CatId}",
"~/products.aspx"
);
在Application_Start函数中。
我错误地认为定义这样的页面路由不会干扰目录结构,这被证明是错误的。即使在上面的示例中使用products.aspx
,它也会被视为子文件夹类别中名为3001的文件。
我犯的另一个错误是我的所有文件引用,包括img标签上的src,ajax url调用,脚本标记和所有href链接相关。由于img和脚本等在固定的位置,因此给它们明确的引用是有意义的。 /img/image.jpg
而不是img/image.jpg
(添加了前导斜杠和类似的链接.Asp:带有ImageUrl参数的标记,以~/
开始。使用Search&amp; Replace一小时后,一切正常。< / p>