2009-03-06 5 views
1

Ich habe eine App auf einem IIS6-Server bereitgestellt. Fürs Erste benutze ich das Wildcard-Mapping. Meine App funktioniert einwandfrei auf meinem Entwicklungscomputer, aber wenn ich versuche, auf dem Server darauf zuzugreifen, funktionieren einige Seiten und andere nicht.Warum werden meine Bilder/mein Skript nicht auf der asp.net mvc-Seite angezeigt?

Es ist die Skripte & Bilder, die mir das größte Problem geben.

Ich habe eine URL http://localhost/sdev/home/index und die Seite kommt gut, außer die Bilder und Skripte laden nicht. Wenn ich Quelle betrachten und sehen Sie die URL ich sehe:

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

Wenn ich zu dieser URL zu navigieren versuchen, versucht es zu

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

zu gehen statt

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

Die seltsame Sache ist, dass einige Seiten gut funktionieren, wie zum Beispiel:

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

Irgendwelche Ideen, was ich tun kann, um das zu beheben? Ja, ich habe Phils Anweisungen gelesen und dachte, dass ich ihnen richtig gefolgt bin, aber vielleicht habe ich etwas übersehen.

+0

Welche Version von MVC sind Sie? RC1? RC1 Aktualisieren? RC2? –

+0

Ich führe RC2. –

Antwort

1

Verwenden

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

die URLs zu erzeugen, und Sie sollten in Ordnung sein.

0

Anstatt, dies zu tun:

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

tun:

/sdev/Content/Images/logo.png 

Noch besser, zu erzeugen, um den ersten Teil dieser URL (/ sdev) in Ihrem Code hinter, da es wie vielleicht klingt, dass Teil würde sich ändern (Ich vermute hier "Sdev" ist eine Art von Entwicklungsversion der Website, und für die Produktion gäbe es keine "Sdev" vor den URLs?)

Der Grund, warum es nicht geht rk im ersten Beispiel ist, dass der Browser sieht, als ob Sie eine Datei mit dem Namen "index" im Verzeichnis "sdev/home" betrachten. Wenn Sie also zwei Verzeichnisse hochgehen, gelangen Sie auf die Stammebene.

Es funktioniert aber gut für die "/ sdev/ServiceCall/DivisionStep/ALB" Weil Sie jetzt "ALB" im Verzeichnis "/ sdev/ServiceCall/DivisionStep" suchen, und gehen zwei Ebenen bringt Sie zu "/sdev“

+0

Ich verstehe, was Sie sagen, aber warum funktioniert es gut auf meinem PC, wenn ich es während des Testens ausführen? Liegt es an iis6? –

+0

Ich habe keine Ahnung, warum es auf Ihrem PC funktionieren würde. Es sollte nicht :) –

1

Ich habe gerade ein paar Helfer für Bilder geschrieben, die Sie verwenden können.

(1) Erstellen Sie einfach eine öffentliche statische Klasse namens AppHelper mit einer using System.Web.Mvc; und fügen Sie sie zu einem Ordner in Ihrem MVC-Projekt namens "Helpers" hinzu.

(2) in diesen Verfahren kopieren:

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) ..und verwenden Sie so: <% =Html.Image("small_pic_border","~/Content/Images/Home/office2_137x139.jpg","principal headshot","137","139") %>

Diese Methode verwendet die Url.Content-Methode, die Liammlennnan erwähnt. Es sollten Sie auch zwingen, in ein paar gute habbits: wie mit alternativen Text usw.

Für Skripte verwenden: <script type="text/javascript" src="<% =Url.Content("~/Scripts/mootools.js") %>"></script>

Verwandte Themen