我有一个中继器,其中有一个表,其中包含由中继器绑定(bind)的 td 的许多属性。 我必须向每个 td 添加一个 runat 服务器,以便我可以添加一个可见属性,因为根据数据,某些 tds 是不可见的。
现在我已经添加了 runat 服务器 我在设置我的 tds 的背景颜色时遇到了问题。它是用一个绑定(bind)值完成的。 当我将 <%%> 标签添加到我的样式时,它们将以纯文本形式输出,它甚至在我的 html 中说“这不是 scriptlet。将以纯文本形式输出”,而我的其余 <%%> 标签正确绑定(bind)。
为什么我的风格不再受约束?
我添加的其他标签会,但不是样式?
这是我的中继器的简化版。
<table id="Table1" border="1" cellpadding="0" cellspacing="0" class="groups">
<tr id="Tr1" class="thead">
<td colspan='<%#AllowedItems.Count() %>' align="center">
items
</td>
</tr>
<tr class="theadL">
<td id="Td1" runat="server" visible='<%#ItemAllowed("Item1")%>'>
item1
</td>
<td id="Td2" runat="server" visible='<%#ItemAllowed("Item2")%>'>
item2
</td>
<td id="Td3" runat="server" visible='<%#ItemAllowed("Item3")%>'>
item 3
</td>
</tr>
<asp:Repeater ID="Repeater1" runat="server" DataSource='<%# GetData((int)Eval("Id"))%>'>
<ItemTemplate>
<tr>
<td id="Td9" title='<%#Eval("Item1Status")%>' runat="server" visible='<%#ItemAllowed("Item1")%>'
style='background-color: <%#Eval("Item1StatusColour")%>;'>
</td>
<td id="Td10" title='<%#Eval("Item2Status")%>' runat="server" visible='<%#ItemAllowed("Item3")%>'
style='background-color: <%#Eval("Item3StatusColour")%>;'>
</td>
<td id="Td11" title='<%#Eval("Item3Status")%>' runat="server" visible='<%#ItemAllowed("Item4")%>'
style='background-color: <%#Eval("Item4StatusColour")%>;'>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
更新
样式呈现如下:
style="background-color:<%# ""+ Eval("Item1StatusColour")%>;"
属性的所有其余部分都按照应有的方式呈现。
更新 这是请求的 ItemAllowed 方法
public bool ItemAllowed(string item)
{
//allowed items is a list<string>
return AllowedItems.Contains(item);
}
最佳答案
我建议的第一件事是使用 css 类而不是你正在做的事情。
当您将 html 元素与 runat=server 一起使用时,您会将其转换为 html 控件,而 .net 将呈现最终输出。您的特定问题源于 .net 使用 htmlencode 或类似的东西包装值。
我建议也许使用带有 onrowdatabound 事件的 gridview。然后您可以在代码隐藏中以编程方式执行任何操作。
关于c# - 转发器中的 td 样式不会输出绑定(bind)值 ("This is not a scriptlet. Will output as plain text"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838658/