C#和ASP.NET MVC:在视图中使用#if指令
C#和ASP.NET MVC:在视图中使用#if指令
我在Visual Studio的项目属性中设置了一个名为\"RELEASE\"的条件编译符号。当定义了RELEASE符号时,我希望将某些特定的CSS应用于元素,我试图从视图中实现这个目标,但似乎并不起作用。\n我的视图代码如下(为了演示目的进行了简化):\n
<% #if (RELEASE) %> 在这里添加横幅文本 <% #else %> 在这里添加横幅文本 <% #endif %>
\n使用这段代码并设置了RELEASE符号后,\"else\"代码块被执行,我得到了一个具有debugBanner类的div。所以它似乎并不认为RELEASE已定义。值得注意的是,我的实际C#代码中的.cs文件能够识别RELEASE并运行正确的代码。只有视图给我带来了问题。\n有人对此有什么见解吗?任何帮助将不胜感激。谢谢。\n澄清:我应该提到这个视图已经是一个部分视图,我只需在需要的页面上呈现它。这是因为这些横幅将出现在某些页面上而不出现在其他页面上。所以即使通过以下方式将其呈现为部分视图:\nHtml.RenderPartial(\"BannerView\");
\n它也不起作用。
C#和ASP.NET MVC:在视图中使用#if指令的问题
在您的模型中:
bool isRelease = false; <% #if (RELEASE) %> isRelease = true; <% #endif %>
在您的视图中:
<% if (Model.isRelease) { %>Banner text here<% } else { %>Banner text here<% } %>
从这个答案中,我了解到从视图中无法检查编译符号,必须从.cs文件中进行检查。这是真的吗?
不错的解决方案,但是将此逻辑放在所有控制器都继承的基本控制器中如何?然后您可以通过所有控制器访问此属性...
嗯,我不确定这完全能行得通xander。要从视图中访问它,我们需要一个具有该属性的模型,而不是具有该属性的控制器。因此,我必须从多个控制器传递相同的模型并呈现该视图,这可能有点麻烦。
如果将该逻辑放在基本控制器中并从派生控制器中访问它,那么您可以将其分配给ViewData或某个自定义的ViewModel。
所以实际上,我要在我们的全局文件中设置一个属性,这应该解决问题。与Develop Art的解决方案相同的基本原理,但稍作调整。感谢回答。
我认为创建一个HtmlHelper扩展会更好,但了解到视图始终处于Debug模式下也是好的。
问题:在C#和ASP.NET MVC中,在视图中使用#if指令的原因和解决方法是什么?
原因:在C#和ASP.NET MVC中,使用#if指令可以根据不同的条件编译代码。这对于根据构建配置或其他条件在视图中执行不同的操作非常有用。
解决方法:一个更好、更通用的解决方法是使用扩展方法,这样所有的视图都可以访问它。在视图中添加以下代码:
public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
return false;
#else
return true;
#endif
}
然后在任何视图中可以这样使用它(使用Razor语法):
@(Html.IsReleaseBuild())
...
需要注意的是,这个解决方法取决于这个方法所在的位置。如果它在一个以发布模式编译的共享库中,当它包含在以调试模式编译的项目中时,它将返回false。
这个问题的更多讨论可以在这个链接中找到:stackoverflow.com/questions/28400135/…
这个方法应该放在哪里?在控制器中?还是一个单独的类中?
以上就是关于在C#和ASP.NET MVC中使用#if指令的原因和解决方法的内容。
问题的原因是在视图中使用了#if指令,但使用该指令的方式可能不正确。解决方法是使用HttpContext.Current.IsDebuggingEnabled来替代#if指令,并在视图中进行测试。
以下是一篇关于在C#和ASP.NET MVC中使用#if指令的文章:
最近我发现,在视图中可以简单地测试HttpContext.Current.IsDebuggingEnabled,这样就不需要在应用程序的其他部分中检查符号了。这是我认为最好的方法。
有人提出是否应该使用this.Context.IsDebuggingEnabled,但这个方法只适用于在网页应用程序之外使用Razor视图的情况。我已经在开发环境中进行了测试,并通过在本地发布(我的机器上的文件夹,.pubxml)使用IIS进行了测试,结果非常好。这是在2022年使用VS22和NET Framework 4.8项目。
希望这篇文章对你有所帮助!