Развертывание приложения ASP.NET MVC в нескольких виртуальных каталогах (проблемы с URL-ссылками и файлами JS) - PullRequest
2 голосов
/ 09 февраля 2010

Я не уверен, правильно ли назван мой вопрос, но вот проблема:

У меня есть приложение MVC.NET, которое развернуто в нескольких виртуальных каталогах. Причина этого в том, что у нас разные версии на разных этапах QA.

Проблема в том, что на одном сайте ссылки .js предназначены для

/ VirtualDir / скрипты / file.js

и на другом сайте это

/ OtherVirtualDir / скрипты / file.js

Другим аспектом этой проблемы является то, что у меня есть HtmlHelpers, которые создают ссылки. Проблема в том, что у меня нет UrlHelper в методах HtmlHelper. Можно ли передать UrlHelper из представления в HtmlHelper? Могу ли я получить это, чтобы сгенерировать теги?

Кто-нибудь еще сталкивался с такими проблемами? Есть предложения?

Спасибо

Dave

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

Хорошо, в итоге оказалось, что решение таково:

<%= Html.JavaScriptTag("siteFunctions.js")%>
<%= Html.MyCSS("Site.css")%>
<%= Html.MyImage("loading_large.gif") %>

со следующим определением для первого примера выше

public static string JavaScriptTag(this HtmlHelper htmlHelper, string fileName)
{
    TagBuilder js = new TagBuilder("script");
    string path = VirtualPathUtility.ToAbsolute("~/Scripts/" + fileName);
    js.MergeAttribute("src", path);
    js.MergeAttribute("type", "text/javascript");

    return js.ToString();
}

эти HtmlHelpers фантастические!

1 голос
/ 10 февраля 2010

Когда я делаю ссылки на файлы из View в MVC, я всегда использую это

<script src="<%= Url.Content ("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script>

Поскольку ссылки View относятся к ресурсу, запрашивающему их, использование этого бита Javascript на главной странице может помочь, если вам нужны «относительные» пути внутри ваших файлов .JS.

<script type="text/javascript">var imgRoot = '<% = Page.ResolveUrl("~/Images/") %>';</script>

И, наконец, CSS работает просто отлично, поскольку все пути в CSS относятся к расположению файла .css.

1 голос
/ 09 февраля 2010

Вы можете подумать о создании контроллеров, возвращающих FileResult для статического содержимого (css, js и т. Д.), Которое инкапсулирует пути.

...