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 }