ASP.Net Eval()如何工作?

时间:2013-01-27 15:14:02

标签: asp.net data-binding

有人可以解释一下Eval在ASP.NET中是如何运作的吗?

我知道Eval只是DataBinder.Eval的表达,但我想知道幕后实际发生了什么。

我读到DataBind发生在控件PreRender上,但这让我感到困惑,因为我可以随时调用控件.DataBind()函数。

Eval语句在什么时候成为实际文本?

1 个答案:

答案 0 :(得分:0)

以下是使用ILSpy反编译的所有overloads的实现。这对你有帮助。

public static object Eval(object container, string expression)
{
if (expression == null)
{
    throw new ArgumentNullException("expression");
}
expression = expression.Trim();
if (expression.Length == 0)
{
    throw new ArgumentNullException("expression");
}
if (container == null)
{
    return null;
}
string[] expressionParts = expression.Split(DataBinder.expressionPartSeparator);
return DataBinder.Eval(container, expressionParts);
}



public static string Eval(object container, string expression, string format)
{
object obj = DataBinder.Eval(container, expression);
if (obj == null || obj == DBNull.Value)
{
    return string.Empty;
}
if (string.IsNullOrEmpty(format))
{
    return obj.ToString();
}
return string.Format(format, obj);
}


 private static object Eval(object container, string[] expressionParts)
 {
object obj = container;
int num = 0;
while (num < expressionParts.Length && obj != null)
{
    string text = expressionParts[num];
    if (text.IndexOfAny(DataBinder.indexExprStartChars) < 0)
    {
        obj = DataBinder.GetPropertyValue(obj, text);
    }
    else
    {
        obj = DataBinder.GetIndexedPropertyValue(obj, text);
    }
    num++;
}
return obj;
}