2008-12-18 14 views
32

Czy mogę zrobić coś takiego w znacznikach strony asp.net, bazując na ustawieniu "Define DEBUG constant"?Czy istnieje #F DEBUG dla znaczników Asp.net?

#IF (DEBUG) THEN 
    <asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
#END IF 
+1

Zła odpowiedź została ustawiona jako poprawna. –

Odpowiedz

6

Bliskie jak mogę uzyskać to:

<asp:Literal id="isDebug" runat="server" /> 
<script runat="server"> 
    void Page_Load() 
    { 
#if DEBUG 
     isDebug.Text = "You're in debug mode"; 
#endif 
    } 
</script> 

To daje problemy, jeśli chciał mieć nic innego w Page_Load() zdarzenia; powyższy kod literowy działa tylko wtedy, gdy strona/kontrola nie ma kodu.

Gdybym musiał to zrobić, umieściłbym powyższy kod w kontrolce użytkownika i zawarłbym tę kontrolę na interesujących stronach.

Moja kontrola użytkownik testowy wygląda następująco:

<%@ Control Language="C#" AutoEventWireup="true" %> 
<asp:Literal id="isDebug" runat="server" /> 
<script runat="server">  
    void Page_Load()  
    { 
#if DEBUG   
     isDebug.Text = "You're in debug mode"; 
#endif  
    } 
</script> 
-1

Łatwo byłoby rzucić własną. Możliwe, że pominiesz kilka fajniejszych nie kompilujących funkcji Kompilacji Stałych, ale na pewno będziesz mieć możliwość dodawania znaczników na podstawie jakiegoś globalnego parametru.

0

Co powiesz na używanie Literału, a następnie użycie #if DEBUG w swoim kodzie do tyłu, aby wstrzyknąć html dla twojego pola tekstowego do literału? W ASP.NET istnieją również bloki kodu bezpośredniego, ale nie wiem, czy dotyczą one instrukcji #if; te wydają się być zarezerwowane dla kompilatora C#.

56
<form runat="server"> 
<% #if DEBUG %> 
<asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
<% #else %> 
<asp:TextBox ID="TextBox2" runat="server">Mmm... No, I think you're not in debug mode</asp:TextBox> 
<% #endif %> 
</form> 

Należy pamiętać, że nie można przypisać ten sam identyfikator dla tych polach tekstowych.

Należy również pamiętać, że DEBUG jest prawdziwe, gdy jest on ustawiony tak w web.config:

<compilation debug="true"> 
+0

jest sposób na automatyczne ustawienie debugowania podczas debugowania i na odwrót? – Guy

+3

@Guy 'DEBUG' wskazuje, czy używasz Debug Build (W przeciwieństwie do wersji Release/other). Myślę, że to, czego chcesz, to 'Debugger.IsAttached' lub' HttpContext.Current.IsDebuggingEnabled' - Będzie prawdziwe, jeśli zostanie uruchomione z poziomu VS, w przeciwnym wypadku (chyba że ręcznie włączysz debugger). – Basic

+1

Z mojego doświadczenia wynika, że ​​działa tylko wtedy, gdy zadeklarowałam w nagłówku twojego pliku ASPX lub ACX '<% @ CompilerOptions =" ​​/ d: DEBUG "%>'. Ale wtedy nie przełącza się automatycznie po przełączeniu z debugowania do zwolnienia. ** Uwaga ** w ten sposób można zdefiniować wiele zmiennych, jeśli rozdzielimy je średnikami, np. '<% @ CompilerOptions =" ​​/ d: myVar1; myVar2 "%>'. Każdą z nich można sprawdzić za pomocą instrukcji '<% #if myVar%>. – Matt

6

Jeśli próbują przejść przez javascript lub wolą minify JavaScript kiedy nie debugowania, wolę takie podejście:

<% if (Debugger.IsAttached) { %> 

    <script src="jquery.js"></script> 

<% } else { %> 

    <script src="jquery.min.js"></script> 

<% } %> 

Mogę łatwo przejść przez kod, gdy debuguję, w przeciwnym razie chcę, aby skrypty zostały zminimalizowane. Pamiętaj, aby podać następujące import:

<%@ Import Namespace="System.Diagnostics" %> 

Ponadto, dobrze jest używać Essentials Web wizualny rozszerzenie Studio pakiet/minify pliki javascript tak, że istnieje tylko jedno żądanie do serwera dla swoich skryptów.

Powiązane problemy