J'écris ma première page Razor aujourd'hui, et je n'arrive pas à trouver comment entrer.
#if debug
...
#else
...
#endif
Comment puis-je faire cela dans Razor ?
J'écris ma première page Razor aujourd'hui, et je n'arrive pas à trouver comment entrer.
#if debug
...
#else
...
#endif
Comment puis-je faire cela dans Razor ?
Je viens de créer une méthode d'extension :
public static bool IsDebug(this HtmlHelper htmlHelper)
{
#if DEBUG
return true;
#else
return false;
#endif
}
Puis je l'ai utilisé dans mes vues comme ça :
<section id="sidebar">
@Html.Partial("_Connect")
@if (!Html.IsDebug())
{
@Html.Partial("_Ads")
}
<hr />
@RenderSection("Sidebar", required: false)
</section>
Comme l'aide est compilée avec le symbole DEBUG/RELEASE, elle fonctionne.
Bien sûr, cette méthode d'extension doit être intégrée au projet MVC, et non à une bibliothèque séparée qui pourrait être compilée avec différentes options...
Cela n'a pas fonctionné pour moi du tout - il a produit "True" indépendamment du mode de compilation. La réponse de Jordan Gray a parfaitement fonctionné.
C'est intégré dans HttpContext
:
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Means that debug="true" in Web.config
}
IMO, cela a plus de sens que la compilation conditionnelle pour les vues et s'avère pratique pour certains scénarios de test. (Voir Commentaire de Tony Wall ci-dessous).
NullReferenceException
para HttpContext.Current
Alex Angas a mentionné qu'ils obtiennent un NullReferenceException
avec cette solution, et quelques personnes ont upvoted indiquant que ce n'est peut-être pas un événement isolé.
Ma meilleure supposition : HttpContext.Current
est stocké dans CallContext
Il n'est donc accessible que par le thread qui traite la requête HTTP entrante. Si vos vues sont rendues sur un autre thread (peut-être des solutions pour les vues précompilées ?), vous obtiendrez un message d'erreur null
valeur pour HttpContext.Current
.
Si vous obtenez cette erreur, merci de me le faire savoir dans les commentaires et de mentionner si vous utilisez des vues précompilées ou toute autre configuration spéciale qui pourrait faire que vos vues soient partiellement rendues/exécutées sur un autre thread !
Il présente l'avantage de pouvoir être activé dans des environnements de test d'intégration afin de diagnostiquer les problèmes de déploiement qui ne sont souvent pas visibles avant d'être installés sur des PC de non-développeurs.
J'obtiens une exception de référence nulle en utilisant cette méthode, probablement parce qu'en mode Release, l'attribut de débogage est entièrement supprimé du web.config.
@AlexAngas Eugh, c'est extrêmement désagréable - merci de l'avoir mentionné. Je vais essayer d'obtenir une reproduction plus tard et mettre à jour ma réponse. S'il jette une exception, je le signalerai comme un bogue du framework - il devrait retourner false plutôt que de jeter une exception si l'attribut n'est pas présent !
C# et ASP.NET MVC : Utilisation de la directive #if dans une vue
En fait, cette réponse a la bonne réponse. Vous allez devoir passer si vous êtes en mode débogage ou non via le Model. (ou ViewBag) puisque toutes les vues sont compilées en mode débogage.
Par défaut, les vues MVC ne sont pas compilées, donc #IF DEBUG ne peut pas fonctionner dans une vue. Si vous voulez compiler la vue afin d'accéder à la configuration IF DEBUG, vous devez :
changer l'attribut suivant de false à true
<MvcBuildViews>true</MvcBuildViews>
rechargez votre projet et les vues vont être compilées.
La seule autre solution serait d'avoir une fonction dans votre code derrière
public static Boolean DEBUG(this System.Web.Mvc.WebViewPage page)
{
var value = false;
#if(DEBUG)
value=true;
#endif
return value;
}
et ensuite l'appeler depuis la vue :
if(DEBUG())
{
//debug code here
}
else
{
//release code here
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Duplication possible de stackoverflow.com/questions/378982/
11 votes
Ce que je veux dire, c'est que vous voulez
#if debug
en rasoir mais il toujours être vrai. La réponse à votre question est donc qu'il n'y a aucun intérêt à le faire car Razor compilera toujours en mode débogage.