Есть ли #IF DEBUG для разметки Asp.net?

Могу ли я сделать что-то подобное в разметке страницы asp.net, основываясь на настройке "Определить константу DEBUG"?

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

Ответ 1

Закрытие, которое я могу получить, это:

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

Это даст вам проблемы, если вы хотите иметь что-то еще в своем событии Page_Load(); буквальный код выше работает только в том случае, если страница/элемент управления не имеет кода.

Если бы мне это нужно, я бы включил этот код в пользовательский элемент управления и включил этот элемент управления на интересующие страницы.

Мой тестовый пользовательский элемент управления выглядит следующим образом:

<%@ 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> 

Ответ 2

<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>

Обратите внимание, что вы не можете назначить один и тот же идентификатор для этих текстовых полей.

Также обратите внимание, что DEBUG истинно, когда он установлен так в web.config:

<compilation debug="true">

Ответ 3

Если вы пытаетесь выполнить javascript или предпочитаете минимизировать javascript, когда не отлаживаете, я предпочитаю этот подход:

<% if (Debugger.IsAttached) { %>

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

<% } else { %>

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

<% } %>

Я могу легко выполнить код при отладке, иначе я хочу, чтобы скрипты были минимизированы. Обязательно укажите следующий импорт:

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

Кроме того, приятно использовать расширение Visual Studio для веб-сайтов Essentials для связывания/минимизации ваших файлов javascript, чтобы на ваши сценарии был только один запрос на сервер.

Ответ 4

Как насчет использования Literal, а затем с помощью #if DEBUG в вашем коде для ввода html для вашего текстового поля в литерал? Также есть прямые блоки кода в ASP.NET, но я не знаю, имеют ли они дело с операторами #if; они, похоже, зарезервированы для компилятора С#.

Ответ 5

Было бы достаточно просто бросить свой собственный. Вы можете пропустить некоторые из более компиляционных функций компиляции, но у вас наверняка есть возможность добавлять разметку на основе какого-либо глобального параметра.