【问题标题】:How does ASP.Net Eval() work?ASP.Net Eval() 是如何工作的?
【发布时间】:2013-01-11 00:12:51
【问题描述】:

谁能解释一下 Eval 在 ASP.NET 中是如何工作的?

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

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

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

【问题讨论】:

    标签: asp.net data-binding


    【解决方案1】:

    这是使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多