【问题标题】:ASP.NET WebForms Routing causing problems with js, css and imagesASP.NET WebForms 路由导致 js、css 和图像出现问题
【发布时间】:2012-02-15 15:54:46
【问题描述】:

我现在遇到了一个关于 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?

【问题讨论】:

  • 这些扩展通常不会被 asp.net 处理程序处理,因此通常不会受到路由的影响。您是否已将 IIS 配置为强制所有文件类型通过 asp.net?
  • 它实际上是在路由图像吗?还是只是试图相对于页面访问它们?也许你只需要让它们绝对是网站根目录,例如“~/img/someimgage.png”?
  • @TiesonT。谢谢你的链接。是的,我确实检查过,但那里的解决方案不起作用。
  • @DaleBurrell 这是一个非常有趣,当然不是意料之中的工作答案,它表明有时我们必须改变看待事物的角度。我从没想过除了我的global.asax,因此您在这里有一个简单的 html 解决方案.. 不可思议!非常感谢..

标签: asp.net url routing webforms


【解决方案1】:

您可以告诉路由忽略特定的文件类型。确保此条目出现在特定路线之前。

routes.IgnoreRoute("{file}.png")

【讨论】:

  • 对我来说,routes.Ignore 有效,但未找到 IgnoreRoute。可能会在新版本中被替换。
【解决方案2】:

好的.. 很奇怪,但我似乎找到了解决方案:

首先,让您知道,@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

一切似乎都很好,现在正在运行。如果有其他问题,我会在这里发布...

【讨论】:

    【解决方案3】:

    只需将您希望排除的内容添加到 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>
    

    【讨论】:

      【解决方案4】:

      我遇到了这个问题...我正在实施路由,因此我的网址对于搜索引擎来说看起来不错...(类似于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 和 scripts 等位于固定位置,因此给它们明确的引用是有意义的,即。 /img/image.jpg 而不是 img/image.jpg(添加前导斜杠和类似的链接。Asp:带有 ImageUrl 参数的标签以开始 ~/。使用搜索和替换一小时后一切正常。

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2016-01-06
        • 1970-01-01
        • 2018-03-14
        相关资源
        最近更新 更多