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

10 浏览
0 Comments

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它也不起作用。

0
0 Comments

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模式下也是好的。

0
0 Comments

问题:在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指令的原因和解决方法的内容。

0
0 Comments

问题的原因是在视图中使用了#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项目。

希望这篇文章对你有所帮助!

0