Почему мои изображения / скрипт не будут отображаться на развернутом сайте asp.net mvc? - PullRequest
1 голос
/ 07 марта 2009

Я развернул приложение на сервере IIS6. На данный момент я использую подстановочный знак. Мое приложение отлично работает на моей машине для разработки, но когда я пытаюсь получить к нему доступ на сервере, некоторые страницы работают, а некоторые нет.

Именно сценарии и изображения создают мне самую большую проблему.

У меня есть URL http://localhost/sdev/home/index, и страница отображается нормально, за исключением того, что изображения и скрипты не загружаются. Когда я просматриваю источник и смотрю на URL, я вижу:

../../Content/Images/logo.png

Если я пытаюсь перейти к этому URL, он пытается перейти к

http://localhost/content/images/logo.png

вместо

http://localhost/sdev/content/images/logo.png

Странно то, что некоторые страницы работают нормально, например:

http://localhost/sdev/ServiceCall/DivisionStep/ALB?type=fsr

Есть идеи, что я могу сделать, чтобы это исправить? Да, я прочитал инструкции Фила и подумал, что правильно их выполняю, но, может быть, я что-то пропустил.

Ответы [ 3 ]

1 голос
/ 07 марта 2009

Используйте

<%= Url.Content("~/Content/Images/logo.png") %>

для генерации URL-адресов, и вы должны быть в порядке.

1 голос
/ 07 марта 2009

Я только что написал несколько помощников для изображений, которые вы можете использовать.

(1) просто создайте общедоступный статический класс под названием AppHelper с using System.Web.Mvc; и добавьте его в папку в вашем проекте MVC под названием «Помощники».

(2) скопируйте в этих методах:

    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height)
    {
        return Image(helper, classText, sourcePath, altText, width, height, null);
    }
    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height, object htmlAttributes)
    {
        StringBuilder sb = new StringBuilder();
        if (htmlAttributes != null)
            foreach (PropertyInfo p in htmlAttributes.GetType().GetProperties())
                sb.AppendFormat(@" {0}=""{1}""", p.Name, p.GetValue(htmlAttributes, null).ToString());

        if (htmlAttributes == null)
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}"" />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height);
        else
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}""{5} />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height, sb.ToString());
    }

(3) ..и использовать так: <% =Html.Image("small_pic_border","~/Content/Images/Home/office2_137x139.jpg","principal headshot","137","139") %>

Этот метод использует метод Url.Content, упомянутый liammclennan. Это также должно привести к хорошим привычкам: например, использовать альтернативный текст и т. Д.

Для скриптов используйте: <script type="text/javascript" src="<% =Url.Content("~/Scripts/mootools.js") %>"></script>

0 голосов
/ 07 марта 2009

Вместо того, чтобы делать это:

../../Content/Images/logo.png

Сделайте это:

/sdev/Content/Images/logo.png

Еще лучше, сгенерируйте первую часть этого URL (/ sdev) в своем коде, так как похоже, что эта часть изменится (я полагаю, здесь "sdev" - это какая-то версия сайта для разработки, и для производства не будет "sdev" перед URL-адресами?)

Причина, по которой он не работает в первом примере, заключается в том, что браузер видит его так, как будто вы просматриваете файл с именем "index" в каталоге "sdev / home". Таким образом, поднявшись на два каталога, вы попадете на корневой уровень.

Хотя он работает нормально для "/ sdev / ServiceCall / DivisionStep / ALB", потому что вы сейчас смотрите на "ALB" в каталоге "/ sdev / ServiceCall / DivisionStep", и если вы поднимитесь на два уровня, вы попадете в "/ SDEV "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...