Eval()事件问题

时间:2011-09-04 10:16:18

标签: asp.net

如您所见,如果条件为真,我尝试使用substring命令获得20个字符。但它不同意。

'<%#IIf(Eval("haber").ToString().Length >= 20, Eval("haber").ToString().Substring(0, 20) + "...", Eval("haber").ToString )%>'

另外,我在onmouseover事件上使用该代码。

像这样:

<a href="" onmouseover=""/>

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

首先:将您的逻辑从标记移到代码隐藏的方法,并在标记中调用此方法。

标记:

<%# this.FormatValue(Eval("haber")) %>

代码隐藏:

public string FormatValue(object value)
{
    string str = (string)value;

   if (str.length > 20)
     return str.Substring(0, 20) + "...";

   return str;
} 

第二:表达式中存在语法错误:在最后一个ToString中缺少()

答案 1 :(得分:0)

IIf不执行短路逻辑 - 换句话说,无论第一个参数是否为真,都会对所有三个参数进行求值。在你的情况下,你没有指定结果是什么,但我打赌你总是得到完整的字符串,即使字符串长度&gt; 20。

你可以像Samich建议的那样做,或者你可以使用新的If语句,它确实实现了短路:

<%#IIf(Eval("haber").ToString().Length >= 20, Eval("haber").ToString().Substring(0, 20) + "...", Eval("haber").ToString())%>

我认为Samich的方法更好(标记中的代码更少),但是如果你想将它留在标记中,你应该使用If运算符:

<%#If(Eval("haber").ToString().Length >= 20, Eval("haber").ToString().Substring(0, 20) + "...", Eval("haber").ToString())%>

IIf Function

If Operator