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

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)

在视图中,它可以帮助您检查应用程序其他部分中的符号.

  • IMO,这是最好的方法。 (2认同)
  • 你不应该使用`this.Context.IsDebuggingEnabled`而不是吗?真的只适用于你嘲笑上下文或以某种方式[在webapp之外使用razor视图](http://stackoverflow.com/questions/3628895/is-it-possible-to-use-razor-view-engine-外-ASP-净) (2认同)

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)


d.p*_*pov 9

@if (HttpContext.Current.IsDebuggingEnabled)
{
    // Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
Run Code Online (Sandbox Code Playgroud)