C # y ASP.NET MVC: Usando la directiva # if en una vista


Tengo un símbolo de compilación condicional que estoy usando llamado "RELEASE", que indiqué en las propiedades de mi proyecto en Visual Studio. Quiero que se aplique algún CSS particular a los elementos cuando se defina el símbolo de LIBERACIÓN, y estaba tratando de hacerlo desde la vista, pero no parece estar funcionando.

Mi código de vista se ve así (acortado un poco para fines de demostración):

<% #if (RELEASE) %>
    <div class="releaseBanner">Banner text here</div>
<% #else %>
    <div class="debugBanner">Banner text here</div>
<% #endif %>

Con este código, y con el conjunto de símbolos de LIBERACIÓN, el código' else ' se está ejecutando y estoy obteniendo un div con la clase debugBanner. Así que no parece pensar que la LIBERACIÓN está definida. Vale la pena señalar que mi código real de C# en .cs files reconoce la LIBERACIÓN y ejecuta el código correcto. Es sólo la vista lo que me está dando el problema.

¿Alguien tiene alguna idea de esto? Cualquier ayuda sería apreciada. Gracias.

Aclaración: Debería haber mencionado que esta vista ya es una vista parcial, y simplemente la representaré en las páginas donde la necesite. Eso es porque estos banners estarán en ciertas páginas y no en otras. Así que incluso cuando se renderiza como una vista parcial a través de:

Html.RenderPartial("BannerView");

No está funcionando.

Author: MegaMatt, 2010-06-01

7 answers

En su modelo:

bool isRelease = false;

<% #if (RELEASE) %>
    isRelease = true;
<% #endif %>

En su opinión:

<% if (Model.isRelease) { %>
    <div class="releaseBanner">Banner text here</div>
<% } else { %>
    <div class="debugBanner">Banner text here</div>
<% } %>
 17
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-01 15:49:48

Yo recientemente descubrí que puedes simplemente probar:

HttpContext.Current.IsDebuggingEnabled

En las vistas, lo que le permite guardar los símbolos de comprobación en otras partes de la aplicación.

 106
Author: UpTheCreek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-30 17:59:51

Una solución mejor y más genérica es usar un método de extensión, para que todas las vistas tengan acceso a él:

public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
    return false;
#else
    return true;
#endif
}

Luego puede usarlo como sigue en cualquier vista (sintaxis razor):

@if(Html.IsReleaseBuild())
...
 58
Author: Birdman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-14 21:48:21
@if (HttpContext.Current.IsDebuggingEnabled)
{
    // Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
 9
Author: d.popov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 09:47:41

Puede usar ViewBag en lugar de viewmodel (pero el enfoque similar a viewmodel es mejor):

Controlador:

código del controlador

Vista:

@{
   bool hideYoutubeVideos = ViewBag.hideYoutubeVideos ?? false;     
}

Uso:

@if (!hideYoutubeVideos)
{
     <span>hello youtube</span>
}

También, asegúrese de que la variable NIKITA_DEBUG exista en la pestaña build de su proyecto:

pestaña construir

 3
Author: Nigrimmist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-19 16:13:21

Para mí, el siguiente código ha funcionado muy bien. Cuando la aplicación está depurando aparecen mis botones, cuando se Libera, no.

@if (this.Context.IsDebuggingEnabled)
{
    <button type="button" class="btn btn-warning">Fill file</button>
    <button type="button" class="btn btn-info">Export file</button>
} 
 1
Author: Matheus Fernandes Amorim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 12:37:21

A continuación se muestra la sintaxis de Razor para las directivas de compilador condicional. Carga la versión de desarrollador de jquery cuando se establece la variable de depuración en VS profile o web.config. De lo contrario se carga la versión min.

@{#if (DEBUG) 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.js"></script>

#else 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
   <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
#endif
}
 -7
Author: Aubrey Cote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-12 17:06:27