我最近开始使用一些遗留的ASP.NET东西,我遇到了一个有趣的问题:
我有一个显示一些值的表,其中一些值在C#服务器端进行评估。他们都正常工作。然后突然......
<td><asp:Label ID="Label2" runat="server" class='<%=SevenDayThresholdTooHighOrLow%>'><%=ChgFromSevenDaysAgoInfo%></asp:Label></td>
正确评估ChgFromSevenDaysAgoInfo。 SevenDayThresholdTooHighOrLow呈现为类引用内的字符串。那是 类= “LT;%= SevenDayThresholdTooHighOrLow%&gt;” 中。
在代码隐藏文件中,两个变量在同一范围内声明,并且一个接一个地分配值。我的Visual Studio并没有抱怨没有在代码中找到某些变量,就像该属性不存在一样。
还有哪些其他因素会影响这种怪异?我可以错过什么?
非常感谢大家的帮助!
编辑:我看了what is the use of Eval() in asp.net并试图以这种方式设置我的标签(class ='&lt;%#Eval(“SevenDayThresholdTooHighOrLow”)%&gt;'),遗憾的是没有效果。< / p>
答案 0 :(得分:1)
class
属性可能不会被评估为服务器端代码,可能是因为class
isn't a property of Label
。 (Label
不是HTML元素,它是服务器端控件。因此,它使用对象属性而不是HTML属性。)
有一个CssClass
属性,您可以尝试这样做。但即使这样,方法也不同,因为系统可能仍然不会尝试评估注入已经服务器端组件的服务器端代码。还是值得一试。
在代码隐藏中设置CssClass
属性应该绝对有效:
Label2.CssClass = SevenDayThresholdTooHighOrLow;
如果你想保持这个代码隐藏(以及谁可能怪你?),那么另一种方法可能是完全用HTML元素替换服务器端控件。这个想法是,如果此控件上的属性不是在服务器端代码中设置,那么它真的需要是服务器端控件吗?如果我没记错的话,Label
会以span
发出:
<span class="<%=SevenDayThresholdTooHighOrLow%>"><%=ChgFromSevenDaysAgoInfo%></span>
答案 1 :(得分:1)
您不能仅在标记代码中执行此操作。您不能在服务器控件中使用服务器标签。您可以使用数据绑定标记,但是无论如何您都需要从后面的代码触发数据绑定。
只需从后面的代码中设置属性:
Label2.CssClass = SevenDayThresholdTooHighOrLow;