Относительная автоматическая перезапись URL в asp.net MVC 2 - PullRequest
1 голос
/ 26 марта 2011

ASP.net MVC 2 переписывает все ваши относительные URL-адреса в теге <link> на полный относительный путь, что хорошо, но работает только для URL-адресов, записанных только в теге <link>, а не тегов <script> или любые другие элементы.

  1. Создание веб-приложения MVC 2
  2. создать любой контроллер и просмотреть его
  3. внутри вида создайте тег <link>, подобный этому <link href="test.xml" type="text/css"/>
  4. запустите ваше приложение, перейдите к созданному вами представлению, а затем просмотрите исходный код

вы обнаружите, что MVC переписал ваш URL-адрес в теге на полный URL-адрес, например:

<link href="../Views/Home/Text.xml" type="text/css" />

я знаю, что этот файл находится в папке Views и его нельзя просмотреть из-за файла web.config, который блокирует любые запросы к файлам, но это не моя проблема

Как мне заставить MVC переписать все URL не только в <link> теге?

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

возможно, вы уже пробовали что-то подобное

<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>
1 голос
/ 26 марта 2011

Это происходит потому, что у вашего тега <head> есть атрибут runat="server" (неприятное наследие от WebForms).Удалите его, и никаких переписываний не произойдет.Также вместо:

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

при работе с URL вы всегда должны использовать помощники Url:

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

Не следует оставлять автоматические перезаписи, всегда используйте Url.Content для связи статическихресурсы.

...