Не удается использовать относительные пути с областями в ASP.NET MVC 2
В моем приложении у меня есть зона вызова Mobile. В этой области у меня есть папка "Активы", куда мы помещаем все наши CSS, Javascript и изображения.
Доступ к просмотрам работает просто отлично. HTTP: // локальный / веб - приложение / мобильный / материал
Проблема в том, когда я получаю доступ к своим CSS, JavaScript и изображениям.
Я не могу сделать что-то подобное на мой взгляд.
<img src="Assets/css/styles.css" />
Причина в том, что реальный URL-адрес: http://localhost/webapp/areas/mobile/assets/css/styles.css
Есть ли способ сопоставить http://localhost/webapp/areas/mobile с http://localhost/webapp/mobile для статических файлов?
Спасибо Рэндалл
2 ответа
Решение, которое я придумал, состояло в том, чтобы использовать простой IHTTPModule, который переписал бы URL для меня. Вот метод, который я реализовал для события BeginRequest.
void BeginRequest(object sender, EventArgs e)
{
var context = HttpContext.Current;
var path = context.Request.Path;
// Add Areas to the Mobile path, so we don't have to specify it manually.
// This is mainly for handling static resources that you place in areas.
if (!path.Contains("Mobile/")) return;
if (path.EndsWith(".png") ||
path.EndsWith(".gif") ||
path.EndsWith(".css") ||
path.EndsWith(".js") ||
path.EndsWith(".htm") ||
path.EndsWith(".cache"))
context.RewritePath(path.Replace("Mobile/", "Areas/Mobile/"));
}
Вам, вероятно, нужно сделать что-то вроде этого:
<img src="../../Mobile/Assets/css/styles.css" />
... в зависимости от того, где на самом деле находится ваш текущий каталог. Вы также можете попробовать что-то вроде:
<img src="~Mobile/Assets/css/styles.css" />
Хороший способ выяснить, каким должен быть фактический путь, - перетащить ресурс (в данном случае styles.css) из Project Explorer в ваше представление и позволить Visual Studio создать путь для вас.