条件编译不起作用。

19 浏览
0 Comments

条件编译不起作用。

阅读这篇stackoverflow上的帖子,想在编译为发布模式时加载不同的CSS。\n代码:\n@if (Debug) \n{\n\n}\nelse\n{\n\n}\n尝试2:\n@if (Debug)\n{\n\n}\nelse\n{\n\n}\n我尝试将DEBUG写成大写字母,但在将Debug编译为Release时没有任何效果。

0
0 Comments

条件编译不起作用的原因是因为在视图中使用条件指令,视图无法直接获取编译时的指令。解决方法是通过在模型中使用属性来驱动视图的条件部分。模型的布尔属性(例如IsDebug)通过编译时的指令来设置,视图依赖于该属性。

具体来说,可以在模型中添加如下代码:

bool IsDebug = true;
#if (!DEBUG)
IsDebug = false;
#endif

在视图中可以这样使用:

@if (Model.IsDebug) 
{
    // 条件为真时的代码
}
else
{
    // 条件为假时的代码
}

另外,也可以使用ViewBag/ViewData来存储布尔值。

更新:

根据评论,可以尝试创建一个名为BaseController的新控制器类,该类继承自Controller类。

public abstract class BaseController : Controller
{
   ...
   protected BaseController()
   {
      bool indebug = false;
      #if DEBUG
      indebug = true;
      #endif
      ViewBag.InDebug = indebug;
   }
}

然后让其他控制器继承自BaseController而不是Controller。在_Layout.cshtml中可以这样使用:

@if (ViewBag.InDebug)
{
    // 条件为真时的代码
}
else
{
    // 条件为假时的代码
}

这种方法可以正常工作。

问题在于这段代码应该在所有页面中执行。对于所有页面使用一个CSS文件的情况下,这种方法适用。如果控制器只有一个,可以将代码放在所有控制器中,但这可能不是理想的解决方案。代码位于_Layout.cshtml(主布局)中,为什么不能在直接视图中使用条件指令?

可以查看我在答案中的其他信息,也许对你也有帮助。

0