2009-04-20 6 views
2

Ich erstellte eine einfache Erweiterungsmethode für den ASP.NET MVC UrlHelper. Es benötigt keine Argumente, da es Aufgabe ist, den Namen einer Stylesheet-Datei aus der Konfiguration nachzuschlagen und eine URL an das Stylesheet zurückzugeben. Die Erweiterung Methode sieht etwa wie folgt aus:UrlHelper-Erweiterung-Methode Aufruf codiert nicht ausgeführt

public static string SiteStylesheet(this UrlHelper urlHelper) 
{ 
    var scriptFilename = UserInterfaceConfiguration.GetSection() 
          .Mvc.SiteStylesheet; 
    return urlHelper.Content(string.Format("~/Assets/Scripts/{0}", 
              scriptFilename)); 
} 

Und ich benutze es wie folgt aus:

<link href="<%= Url.SiteStylesheet() %>" rel="Stylesheet" type="text/css" /> 

Verfahren erhalten jedoch nicht ausgeführt, und folgendes gemacht:

href="../Views/Shared/%3C%25=%20Url.SiteStylesheet()%20%25%3E" 

Wie Sie sehen können, wird die Erweiterungsmethode nicht ausgeführt, sondern das ganze Ding wird nur codiert. Wenn ich die Methode Signatur ändern, um einen Parameter zu übernehmen:

public static string SiteStylesheet(this UrlHelper urlHelper, string dummy) 

dann wird die Erweiterung Methode ausgeführt und die Ausgabe wie erwartet:

href="/Assets/Stylesheets/FluidCMS.css" 

Also meine Frage ist durch Design oder ist dies ein Fehler in der ASP.NET MVC Web Form-Ansichts-Engine?

Antwort

3

Dieses Problem ist einige Male aufgetreten. Die Ursache des Problems ist, dass das head> -Tag < runat = "server" hat, was bewirkt, dass der Parser Tags als Server-Tags behandelt.

Die einfachste Problemumgehung ist, nur runat = "Server" aus dem Kopf-Tag zu entfernen. Was Sie verlieren, ist die Logik, die die Link-URL relativ zur aktuellen Seite macht, aber da Sie Ihren Helfer sowieso verwenden, brauchen Sie das nicht.

3

Als ich dieses Problem hatte, weil meine Erweiterungsmethoden in einem Namespace waren, der nicht in der web.config angegeben wurde.

<add namespace="Your.Extension.Method.Namespace"/> 

unter \ Seiten Konfiguration \ system.web geht \ Namespaces

+1

Danke, aber der Namespace, der meine Erweiterungsmethode enthält, ist in der web.config und ich sehe immer noch das gleiche Verhalten. – user93255

+1

Danke, fiel in diesen selbst. Habe auch nicht gemerkt, dass es 2 web.configs gibt –

0

Ich glaube, Sie einen Fehler gefunden!

Ich habe es versucht und festgestellt, dass dies nur im Kopfbereich einer Masterseite passiert und nur in den <link> Tags (<script> Tags rendern fein).

Das Problem offensichtlich ist der Text innerhalb de href Attribut wird nicht korrekt als Code-Nugget interpretiert.

Dies geht über ASP.NET MVC. Ich habe es in einer Masterseite in einer klassischen Web Form ASP.NET-Site versucht und das Problem besteht weiterhin. Es scheint sich um einen Fehler in der Web Form-Rendering-Engine oder ähnlichem zu handeln.

+0

Danke für die Bestätigung und die weiteren Details. An diesem Punkt ist die Problemumgehung, obwohl Hacky, einfach genug und nicht aufdringlich. Danke noch einmal. – user93255

Verwandte Themen