Frage

Ich versuche, eine Präprozessordirektive in einer ASPX-Seite nutzen zu können, aber die Seite ist es nicht zu erkennen. Ist das nur etwas, was ich nicht tun kann?

Hintergrund: Ich versuche, die Vollversion von jQuery im Debug-Modus (für, na ja, das Debugging =)), und die verkleinerte Version für Release enthalten. Ich habe versucht, aber ich bin nicht sehr vertraut mit der ASPX <% Syntax. Bin ich nur grundsätzlich Missverständnis, was diese Syntax funktioniert?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
War es hilfreich?

Lösung

Interessanter Unterschied hier - mit #if DEBUG in der aspx Seite zieht aus dem Tag in der web.config, aber wenn man es in der Code-Behind verwendet, zieht es DEBUG aus der Konstante aus der Build-Konfiguration in der Projektdatei . Also sind sie tatsächlich den Zugriff auf zwei unterschiedliche Einstellungen.

So, soweit ich das beurteilen kann, ist das nicht wirklich möglich.

Andere Tipps

Ein besserer Ansatz kann sein, Server-Side-Code zu verwenden, um das Skript zu schließen. Ich würde so etwas wie verwenden

protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

Für mich ist die eleganteste Lösung wäre, einfach ein Feld zu definieren, in Code-behind mit Präprozessordirektiven und dann prüfen, für ihren Wert von der aspx-Seite.

Code-Behind:

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

Aspx Seite:

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

Ich habe versucht, den Code, und es funktionierte gut für mich. Ich aktiviert oder deaktiviert DEBUG aus dem system.web / Kompilation Abschnitt in web.config als Webangebot (nicht als Web-Anwendung nicht getestet; vielleicht anders ...).

Um zu sehen, was der Code tut, stellt einen absichtlichen Syntaxfehler in der Seite, und versuchen Sie es aktivierte mit Debug-Modus auszuführen. Der Compiler wird einen Link auf der Fehlerseite erstellen, die Sie die Quelle anzuzeigen können.

. Hinweis: die Pre-Prozessor-Richtlinien ist eingefügt in die Ausgabe

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

Natürlich gibt es andere (bessere) Möglichkeiten zu tun, was Sie wollen ...

Ich habe versucht, so viele Möglichkeiten, im Laufe der Jahre zu erreichen, ohne jeden Erfolg. Nach dem Spielen mit asp.net Mvc vor kurzem habe ich diese Idee. Es gibt eine andere Möglichkeit, es zu halten alle in aspx Seite ungültigen MIME-Typen verwenden. In asp.net MVC werden Vorlagen mit ungültigen MIME geladen  Typen, so dass der Browser sie nicht analysieren wird. Ich folgte das gleiche Muster hier; Wola! Erfolg ... Sie benötigen eine statische Funktion, die Ihnen einen einfachen Zugriff auf Debug-Einschränkung gibt.

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

Ops.IsRelease () ist Public Static-Funktion, die die Debug-constaraint zurück

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

Ich hatte das gleiche Problem habe ich versucht, es in beide ASP.MVC Anwendung und webform Anwendung zu lösen. Die #if Debug immer true zurück, dauert es nie berücksichtigt die web.config Kompilation Einstellung. Ich löste es in ähnlicher Weise wie Syam Beratung in diesem Post, aber anstatt statischer Funktion verwende ich astatcic Variable wie hier beschrieben: http://www.psworld.pl/Programming/DebugDirective

Hier ist meine Lösung:

protected void Page_Load(object sender, EventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    }
    else
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    }
}

Ich glaube nicht, dass Sie leider Präprozessordirektiven in der aspx haben.

Ein einfacher Weg zu gehen, ist einfach eine Eigenschaft in Ihrem haben Code-behind, dass in der jQuery-URL-Feeds, dann können Sie Präprozessordirektiven setzen es zu erklären. Oder wenn Sie es vorziehen, die URL im Code-infront halten Sie eine Literal-Steuerelement verwenden könnte und schalten ihre Sichtbarkeit in der Code-Behind basierend auf den Prozessor-Richtlinien.

Zum Beispiel:

Code-infront:

<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>

Code-behind, in der Page_Load-Methode:

#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top