2009-03-06 6 views
1

J'ai déployé une application sur un serveur IIS6. Pour l'instant, j'utilise le mappage générique. Mon application fonctionne parfaitement sur ma machine de développement, mais lorsque j'essaie d'y accéder sur le serveur, certaines pages fonctionnent et d'autres non.Pourquoi mes images/scripts n'apparaissent-ils pas sur le site déployé asp.net mvc?

Ce sont les scripts & qui me posent le plus gros problème.

J'ai une URL http://localhost/sdev/home/index et la page se présente bien, sauf les images et les scripts ne se chargent pas. Quand je regarde la source et regarde l'URL que je vois:

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

Si je tente de naviguer à cette URL, il essaie d'aller à

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

au lieu de

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

Le chose étrange est que certaines pages fonctionnent bien, tels que:

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

Des idées sur ce que je peux faire pour résoudre ce problème? Oui, j'ai lu les instructions de Phil et j'ai pensé que je les suivais correctement mais peut-être que j'ai raté quelque chose.

+0

Quelle version de MVC vous utilisez? RC1? RC1 Actualiser? RC2? –

+0

Je cours RC2. –

Répondre

1

Utilisez

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

pour générer les urls et vous devriez être ok.

0

Plutôt que de faire ceci:

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

Pour ce faire:

/sdev/Content/Images/logo.png 

Mieux encore, générer la première partie de cette URL (/ SDEV) dans votre code derrière car il ressemble peut-être que la partie changerait (je devine ici "sdev" est une sorte de version de développement du site, et pour la production il n'y aurait pas "sdev" devant les URL?)

La raison pour laquelle il ne wo rk dans le premier exemple est que le navigateur le voit comme si vous regardiez un fichier nommé "index" dans le répertoire "sdev/home". Donc monter deux répertoires vous amène au niveau de la racine. Cela fonctionne très bien pour "/ sdev/ServiceCall/DivisionStep/ALB" Parce que vous regardez maintenant "ALB" dans le répertoire "/ sdev/ServiceCall/DivisionStep", et monter deux niveaux vous amène à "/SDEV »

+0

Je comprends ce que vous dites mais pourquoi cela fonctionne-t-il bien sur mon PC quand je l'exécute pendant le test? Est-ce à cause de iis6? –

+0

Je ne sais pas pourquoi cela fonctionnerait sur votre PC. Ça ne devrait pas :) –

1

Je viens d'écrire quelques aides pour les images que vous pouvez utiliser.

(1) créez simplement une classe statique publique appelée AppHelper avec un using System.Web.Mvc; et ajoutez-la à un dossier dans votre projet MVC appelé 'Helpers'.

(2) copier dans ces procédés:

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) ..et utilisez comme ceci: <% =Html.Image("small_pic_border","~/Content/Images/Home/office2_137x139.jpg","principal headshot","137","139") %>

Cette méthode utilise la méthode Url.Content mentionnée par liammclennan. Elle devrait également vous forcer à quelques bons habbits: comme l'utilisation d'un texte alternatif, etc.

Pour les scripts utiliser: <script type="text/javascript" src="<% =Url.Content("~/Scripts/mootools.js") %>"></script>