我最近开始使用一些遗留的 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/