Meg*_*att 46 c# asp.net-mvc conditional debug-symbols
我有一个名为"RELEASE"的条件编译符号,我在Visual Studio的项目属性中指出了这个符号.我想在定义RELEASE符号时将一些特定的CSS应用于元素,并且我试图从视图中执行此操作,但它似乎不起作用.
我的视图代码看起来像这样(为了演示目的缩短了一点):
<% #if (RELEASE) %>
<div class="releaseBanner">Banner text here</div>
<% #else %>
<div class="debugBanner">Banner text here</div>
<% #endif %>
Run Code Online (Sandbox Code Playgroud)
使用此代码,并使用RELEASE符号集,'else'代码正在运行,我正在使用debugBanner类获取div.所以似乎并不认为RELEASE是定义的.值得注意的是,我在.cs文件中的实际C#代码正在识别RELEASE并运行正确的代码.这只是给我这个问题的观点.
有没有人对此有任何见解?任何帮助,将不胜感激.谢谢.
澄清:我应该已经提到过这个视图已经是局部视图了,我只是在需要它的页面中进行渲染.那是因为这些横幅将出现在某些页面而不是其他页面上.因此,即使通过以下方式将其渲染为局部视图:
Html.RenderPartial("BannerView");
它不起作用.
UpT*_*eek 106
我最近发现你可以简单测试:
HttpContext.Current.IsDebuggingEnabled
Run Code Online (Sandbox Code Playgroud)
在视图中,它可以帮助您检查应用程序其他部分中的符号.
Bir*_*man 61
更好,更通用的解决方案是使用扩展方法,因此所有视图都可以访问它:
public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
return false;
#else
return true;
#endif
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在任何视图(剃刀语法)中使用它,如下所示:
@if(Html.IsReleaseBuild())
...
Run Code Online (Sandbox Code Playgroud)
小智 18
在你的模型中:
bool isRelease = false;
<% #if (RELEASE) %>
isRelease = true;
<% #endif %>
Run Code Online (Sandbox Code Playgroud)
在你看来:
<% if (Model.isRelease) { %>
<div class="releaseBanner">Banner text here</div>
<% } else { %>
<div class="debugBanner">Banner text here</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
Run Code Online (Sandbox Code Playgroud)