Не удается использовать относительные пути с областями в 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 создать путь для вас.

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