ASP.NET MVC RC возвращает неверный путь для Url.Content

ОБНОВЛЕНИЕ эта проблема не существует в битах выпуска ASP.NET MVC

У меня есть приложение ASP.NET MVC RC, которое нормально работает в отладчике, запущенном с http://localhost:9002/ Но когда я публикую его на http://localhost/Zot/, вызовы Url.Content возвращают неверные значения.

У меня есть сценарий тегов, как

<script src="<%= Url.Content("~/Scripts/util.js") %>" ...

На опубликованном сайте это производит:

<script src="Zot/Scripts/util.js" ...

Вместо

<script src="/Zot/Scripts/util.js" ...

или же

<script src="Scripts/util.js" ...

У меня есть теги таблицы стилей, такие как:

<link href="~/Content/Site.css" runat="server" ...

Это производит правильную вещь:

<link href="Content/Site.css" ...

Любые предложения о том, почему Url.Content терпит неудачу. Я явно не могу поставить runat="server" на <script> теги.

2 ответа

Решение

Я склонен использовать помощника регистрации скрипта Роба Конери:

public static string RegisterJS(this System.Web.Mvc.HtmlHelper helper, string scriptLib) {
  //get the directory where the scripts are
  string scriptRoot = VirtualPathUtility.ToAbsolute("~/Scripts");
  string scriptFormat="<script src=\"{0}/{1}\" type=\"text/javascript\"></script>\r\n";
  return string.Format(scriptFormat,scriptRoot,scriptLib);
}

Использование:

<%= Html.RegisterJS("myscriptFile.js") %>

Как вы можете видеть в примере, он использует VirtualPathUtility для разрешения URL-адреса каталога Scripts. Это также должно помочь обойти проблему супа тегов.

Это должно было быть исправлено в RC2. Если вы используете RC2 и все еще видите эту проблему, пожалуйста, отправьте сообщение об ошибке по адресу http://forums.asp.net/1146.aspx.

Другие вопросы по тегам