ASP.NET で Eval が実際にどのように機能するかを誰か説明してもらえますか?
Eval はDataBinder.Evalの単なる式であることは理解していますが、実際に舞台裏で何が起こっているのか知りたいです。
コントロールの PreRender で DataBind が発生することを読みましたが、いつでもコントロールの .DataBind() 関数を呼び出すことができるため、混乱します。
Eval ステートメントが実際のテキストになるのはどの時点ですか?
ASP.NET で Eval が実際にどのように機能するかを誰か説明してもらえますか?
Eval はDataBinder.Evalの単なる式であることは理解していますが、実際に舞台裏で何が起こっているのか知りたいです。
コントロールの PreRender で DataBind が発生することを読みましたが、いつでもコントロールの .DataBind() 関数を呼び出すことができるため、混乱します。
Eval ステートメントが実際のテキストになるのはどの時点ですか?
overloads
ILSpyですべて逆コンパイルした実装を次に示します。これはあなたを助けるでしょう。
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;
}