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.
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>
<% } %>
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.
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())
...
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
}
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:
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:
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>
}
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
}
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