C#和ASP.NET MVC:在视图中使用#if指令

我有一个条件编译符号我使用称为“RELEASE”,我在我的项目在Visual Studio中的属性中指出。 我想要一些特定的CSS被应用到RELEASE符号定义的元素,我试图从视图做到这一点,但似乎并没有工作。

我的视图代码看起来像这样(缩短了一些演示的目的):

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

有了这个代码,使用RELEASE符号集,'else'代码正在运行,并且我正在debuggingdebugBanner类。 所以似乎并不认为RELEASE是定义的。 值得注意的是我的.cs文件中的实际C#代码识别RELEASE并运行正确的代码。 这只是给我的问题。

有没有人有任何见解? 任何帮助,将不胜感激。 谢谢。

澄清:我应该提到,这个观点已经是一个局部的观点,我只是简单地把它放在我需要的地方。 这是因为这些横幅将在某些页面而不是其他页面。 所以即使通过以下方式将其渲染为部分视图:

Html.RenderPartial("BannerView");

它不工作。

在你的模型中:

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

在你看来:

 <% if (Model.isRelease) { %> <div class="releaseBanner">Banner text here</div> <% } else { %> <div class="debugBanner">Banner text here</div> <% } %> 

最近发现,你可以简单地testing:

 HttpContext.Current.IsDebuggingEnabled 

在视图中,这可以节省您在应用程序的其他部分检查符号。

更好,更通用的解决scheme是使用扩展方法,所有视图都可以访问它:

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

您可以在任何视图(剃刀语法)中使用它,如下所示:

 @if(Html.IsReleaseBuild()) ... 
 @if (HttpContext.Current.IsDebuggingEnabled) { // Debug mode enabled. Your code here. Texts enclosed with <text> tag } 

你可以使用ViewBag而不是viewmodel(但是viewmodel-like的方法更好):

控制器:

控制器代码

查看:

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

用法:

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

另外,请确保NIKITA_DEBUGvariables存在于项目的构build选项卡中:

生成选项卡

下面是条件编译器指令的Razor语法。 当在VSconfiguration文件或web.config中设置DEBUGvariables时,它加载jquery的开发者版本。 否则,最小版本被加载。

 @{#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 }