Is there an #IF DEBUG for Asp.net markup?

前端 未结 5 1415
野的像风
野的像风 2020-12-05 17:07

Can I do something like this in the markup of an asp.net page, based off the \"Define DEBUG constant\" setting?

#IF (DEBUG) THEN
  

        
相关标签:
5条回答
  • 2020-12-05 17:52
    <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>
    

    Note that you cannot assign the same ID for those text boxes.

    Also note that DEBUG is true when it is set so in web.config:

    <compilation debug="true">
    
    0 讨论(0)
  • 2020-12-05 17:52

    It would be easy enough to roll your own. You might miss some of the cooler non-compiling features of Compilation Constants but you'd definitely have the ability to add markup based on a global parameter of some sort.

    0 讨论(0)
  • 2020-12-05 18:07

    How about using a Literal and then using #if DEBUG in your code-behind to inject html for your textbox into the literal? Also there are direct code blocks in ASP.NET but I don't know if they deal with #if statements; those seem to be reserved for the C# compiler.

    0 讨论(0)
  • 2020-12-05 18:08

    The close as I can get is:

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

    This would give you problems if you wanted to have anything else in your Page_Load() event; the literal code above only works if the page/control has no code behind.

    If I needed to do this, I would encapuslate the above code into a user control and include that control in the pages of interest.

    My test user control looks like this:

    <%@ 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> 
    
    0 讨论(0)
  • 2020-12-05 18:09

    If you are trying to step through javascript or prefer to minify javascript when not debugging, I prefer this approach:

    <% if (Debugger.IsAttached) { %>
    
      <script src="jquery.js"></script>
    
    <% } else { %>
    
      <script src="jquery.min.js"></script>
    
    <% } %>
    

    I can easily step through code when I am debugging, otherwise I want the scripts to be minified. Be sure to include the following import:

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

    Moreover, it is nice to use the Web Essentials visual studio extension to bundle/minify your javascript files so that there is only one request made to the server for your scripts.

    0 讨论(0)
提交回复
热议问题