J'ai un symbole de compilation conditionnelle que j'utilise appelé "RELEASE", que j'ai indiqué dans les propriétés de mon projet dans Visual Studio. Je veux qu'un CSS particulier soit appliqué aux éléments lorsque le symbole RELEASE est défini, et j'essayais de le faire à partir de la vue, mais cela ne semble pas fonctionner.
Mon code d'affichage ressemble à ceci (raccourci un peu à des fins de démonstration):
<% #if (RELEASE) %>
<div class="releaseBanner">Banner text here</div>
<% #else %>
<div class="debugBanner">Banner text here</div>
<% #endif %>
Avec ce code et avec le jeu de symboles RELEASE, le code 'else' est en cours d'exécution et j'obtiens un div avec la classe debugBanner. Il ne semble donc pas que la libération soit définie. Il convient de noter que mon code C # réel dans les fichiers .cs reconnaît RELEASE et exécute le code correct. C'est seulement la vue qui me pose le problème.
Quelqu'un a-t-il une idée de cela? Toute aide serait appréciée. Merci.
Clarification: J'aurais dû mentionner que cette vue est déjà une vue partielle, et je la rendrai simplement dans les pages où j'en ai besoin. C'est parce que ces bannières seront sur certaines pages et pas sur d'autres. Ainsi, même lors du rendu sous forme de vue partielle via:
Html.RenderPartial("BannerView");
ça ne fonctionne pas.
Dans votre modèle:
bool isRelease = false;
<% #if (RELEASE) %>
isRelease = true;
<% #endif %>
À votre avis:
<% if (Model.isRelease) { %>
<div class="releaseBanner">Banner text here</div>
<% } else { %>
<div class="debugBanner">Banner text here</div>
<% } %>
Je récemment découvert que vous pouvez simplement tester:
HttpContext.Current.IsDebuggingEnabled
dans Vues, ce qui vous évite de vérifier les symboles dans d'autres parties de votre application.
Une meilleure solution, plus générique, consiste à utiliser une méthode d'extension, afin que toutes les vues y aient accès:
public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
return false;
#else
return true;
#endif
}
Vous pouvez ensuite l'utiliser comme suit dans n'importe quelle vue (syntaxe de rasoir):
@if(Html.IsReleaseBuild())
...
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
Vous pouvez utiliser ViewBag au lieu de viewmodel (mais une approche de type viewmodel est meilleure):
Manette :
Vue :
@{
bool hideYoutubeVideos = ViewBag.hideYoutubeVideos ?? false;
}
Utilisation:
@if (!hideYoutubeVideos)
{
<span>hello youtube</span>
}
Assurez-vous également que la variable NIKITA_DEBUG existe dans l'onglet de génération de votre projet:
Pour moi, le code ci-dessous a très bien fonctionné. Lorsque l'application est en train de déboguer, mes boutons apparaissent, quand est Release, ne le faites pas.
@if (this.Context.IsDebuggingEnabled)
{
<button type="button" class="btn btn-warning">Fill file</button>
<button type="button" class="btn btn-info">Export file</button>
}