c# - 是什么导致此 ASP.NET 标记被视为字符串?

标签 c# asp.net css

我最近开始使用一些遗留的 ASP.NET 东西,我遇到了一个有趣的问题:

我有一个显示一些值的表,其中一些值是在 C# 服务器端计算的。它们都正常工作。然后突然...

<td><asp:Label ID="Label2" runat="server" class='<%=SevenDayThresholdTooHighOrLow%>'><%=ChgFromSevenDaysAgoInfo%></asp:Label></td>

ChgFromSevenDaysAgoInfo 被正确评估。 SevenDayThresholdTooHighOrLow 在类引用中呈现为字符串。那是 class="<%=SevenDayThresholdTooHighOrLow%>".

在代码隐藏文件中,这两个变量在同一范围内声明,并且几乎一个接一个地赋值。我的 Visual Studio 不会像属性不存在时那样提示在代码中找不到某些变量。

还有哪些其他因素会影响这种怪异现象?我可能错过了什么?

非常感谢大家的帮助!

  • 以利

编辑:我看了一下 what is the use of Eval() in asp.net并尝试以这种方式设置我的标签 (class='<%# Eval("SevenDayThresholdTooHighOrLow")%>'),不幸的是没有效果。

最佳答案

class 属性可能未针对服务器端代码进行评估,可能是因为 class isn't a property of Label . (Label 不是 HTML 元素,它是服务器端控件。因此它使用对象属性而不是 HTML 属性。)

有一个 CssClass 属性,您可以尝试使用它。但即便如此,方法还是不同的,因为系统可能仍然不会尝试评估注入(inject)到已经服务器端组件中的服务器端代码。不过,值得一试。

绝对有效的是在代码隐藏中设置 CssClass 属性:

Label2.CssClass = SevenDayThresholdTooHighOrLow;

如果您想将其排除在代码隐藏之外(谁会责怪您呢?),那么另一种方法可能是用 HTML 元素完全替换服务器端控件。这个想法是,如果这个控件的属性没有在服务器端代码中设置,那么它真的需要是一个服务器端控件吗?如果我没记错的话,Label 会作为 span 发出:

<span class="<%=SevenDayThresholdTooHighOrLow%>"><%=ChgFromSevenDaysAgoInfo%></span>

关于c# - 是什么导致此 ASP.NET 标记被视为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22846472/

相关文章:

css - 如何绘制带边框的透明背景三 Angular 形?

javascript - 知道单击了哪个按钮的方法-Angular 5

c# - 为什么 HashAlgorithm 类要实现 IDisposable?

jquery - 相对定位的元素不会在 IE 7 中使用 jQuery hide() 隐藏

C#动态编译器,在内存中编译时获取标准输出

c# - 通用Http模块

c# - 在 WHERE 子句中操作可选参数

c# - 如何查找字符串是否包含字符串列表的任何项目?

c# - 如何使用 Microsoft.SmartDevice.Connectivity 从 WinCe 设备获取目录

c# - 使用最小起订量单元测试框架编写测试