Can I do something like this in the markup of an asp.net page, based off the “Define DEBUG constant” setting?
#IF (DEBUG) THEN <asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> #END IF
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
<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">
Method 2
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>
Method 3
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.
Method 4
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.
Method 5
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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0