ASP.NET<%#Eval(“Statement”)%>删除Statement中的HTML字符串?

时间:2013-07-03 00:27:36

标签: c# html asp.net azure-table-storage

我正在尝试从Azure存储表中动态填充ASP.NET网页中的表,我想要包含的功能之一是根据元素的值更改文本的颜色。

我正在使用DataList对象调用GetEntries()方法来获取要显示的所有对象的列表。

表的每个单元格中的文本使用以下内容动态显示:

<%# Eval("VariableName") %> 

所以我尝试通过对GetEntries()方法中的每个对象执行类似的操作来更改文本的颜色:

if (condition) 
   VariableName = "<font color=\"red\">" + VariableName + "</font>";
else
   // ...

当我运行程序时,文字仍为黑色,当我查看来源时,<font color="red">Bob</font仅为Bob

使用Eval时是否会剥离HTML?

如果是这样,是否有一种基于值更改文本颜色的有效方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

要呈现为 html ,您可以尝试:

<asp:Literal Text='<%# Eval("VariableName") %>' Mode="PassThrough" runat="server" />

这要求您在VariableName中使用html(带颜色信息),这可能不是很漂亮。

备选方案1:

但如果您可以添加公共财产VariableColor(并保持VariableName不变),那会更好。

public Color VariableColor
{
    get
    {
        return <condition>? Color.Red : Color.Empty;
    }
}

并像这样使用它:

<asp:Label Text='<%# Eval("VariableName") %>' ForeColor='<%# Eval("VariableColor") %>' runat="Server" />

备选方案2:

更好的方法是创建一个公共bool属性(比如IsDangerous)来评估条件:

public bool IsDangerous
{
    get
    {
        return <condition>;
    }
}

并像这样使用它:

<asp:Label Text='<%# Eval("VariableName") %>' ForeColor='<%# ((bool)Eval("IsDangerous"))?Color.Red:Color.Empty %>' runat="Server" />