相对url在asp.net MVC 2中自动重写

时间:2011-03-26 13:38:08

标签: asp.net-mvc-2 url-rewriting relative-path

ASP.net MVC 2会将<link>标记中的所有相对网址重写为完整的相对路径,这很好,但它仅适用于仅使用<link>标记编写的网址,而不适用于{ {1}}代码或任何其他元素。

  1. 创建MVC 2 Web应用程序
  2. 创建任何控制器及其视图
  3. 在视图中
  4. 创建一个<script>标记,如<link>
  5. 运行您的应用程序,导航到您创建的视图,然后查看源
  6. 您会发现MVC已将您的网址标记重写为完整网址,如:

    <link href="test.xml" type="text/css"/>

    我知道这个文件位于Views文件夹中,由于web.config文件阻止了对文件的任何请求,因此无法查看该文件,但这不是我的问题

    如何让MVC不仅在<link href="../Views/Home/Text.xml" type="text/css" /> tage中重写所有网址?

    任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是因为您的<head>代码具有runat="server"属性(来自WebForms的恶意遗产)。删除它,不会发生重写。而不是:

<link href="test.css" type="text/css" />

在处理网址时,您应始终使用网址助手:

<link href="<%= Url.Content("~/test.css") %>" type="text/css" />

您不应该让自动重写发生,请始终使用Url.Content链接静态资源。

答案 1 :(得分:1)

也许你已经尝试过这样的事情了

<head runat="server">
 <link href="test.xml" type="text/css"/>
 <script src="<%= ((WebFormView)this.ViewContext.View).ViewPath.Substring(1, 
  ((WebFormView)this.ViewContext.View).ViewPath.LastIndexOf('/')) %>test1.xml" type="text/javascript"></script>
</head>

将html呈现为

<head>
 <link href="Views/Shared/test.xml" type="text/css" />
 <script src="/Views/Home/test1.xml" type="text/javascript"></script>
</head>