47

我使用了一个名为“RELEASE”的条件编译符号,我在 Visual Studio 的项目属性中指出了它。我希望在定义 RELEASE 符号时将一些特定的 CSS 应用于元素,并且我试图从视图中执行此操作,但它似乎不起作用。

我的视图代码如下所示(出于演示目的而缩短了一点):

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

使用此代码和 RELEASE 符号集,“else”代码正在运行,我得到一个带有 debugBanner 类的 div。所以似乎没有定义 RELEASE 。值得注意的是,我在 .cs 文件中的实际 C# 代码正在识别 RELEASE 并运行正确的代码。只有观点给我带来了问题。

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

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

Html.RenderPartial("BannerView");

它不工作。

4

8 回答 8

107

最近发现你可以简单地测试:

HttpContext.Current.IsDebuggingEnabled

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

于 2010-12-22T13:56:01.277 回答
61

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

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

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

@if(Html.IsReleaseBuild())
...
于 2012-01-14T21:48:21.847 回答
18

在您的模型中:

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>
<% } %>
于 2010-06-01T15:49:48.567 回答
9
@if (HttpContext.Current.IsDebuggingEnabled)
{
    // Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
于 2013-06-11T09:47:41.890 回答
3

您可以使用 ViewBag 代替 viewmodel(但类似 viewmodel 的方法更好):

控制器 :

控制器代码

看法 :

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

用法 :

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

另外,请确保 NIKITA_DEBUG 变量存在于项目的构建选项卡中:

构建选项卡

于 2015-05-19T16:13:21.153 回答
1

对我来说,下面的代码运行良好。当应用程序在调试时我的按钮出现,什么时候是释放,不要。

@if (this.Context.IsDebuggingEnabled)
{
    <button type="button" class="btn btn-warning">Fill file</button>
    <button type="button" class="btn btn-info">Export file</button>
} 
于 2018-01-04T12:37:21.653 回答
0

您可以像这样使用Debugger.IsAttached

@using System.Diagnostics

@{
    string gridID = $"the-grid-7";

    if (Debugger.IsAttached)
        gridID = gridID + new Random().Next(1, 1000).ToString();

    var loadUrl = ViewBag.LoadUrl;
}
于 2021-03-16T21:42:58.067 回答
-5

下面是条件编译器指令的 Razor 语法。当在 VS 配置文件或 web.config 中设置 DEBUG 变量时,它会加载 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
    }
于 2011-07-12T17:06:27.550 回答