Существует ли #IF DEBUG для разметки Asp.net? - PullRequest
34 голосов
/ 18 декабря 2008

Можно ли сделать что-то подобное в разметке страницы asp.net, основываясь на параметре «Определить постоянную отладки»?

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

Ответы [ 5 ]

59 голосов
/ 03 декабря 2009
<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 имеет значение true, если он установлен в web.config:

<compilation debug="true">
6 голосов
/ 03 декабря 2013

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

<% if (Debugger.IsAttached) { %>

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

<% } else { %>

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

<% } %>

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

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

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

6 голосов
/ 18 декабря 2008

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

<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> 
0 голосов
/ 18 декабря 2008

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

0 голосов
/ 18 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...