38

持つことの違いは何ですか

<%# Eval("State") %>

あなたのaspxページで、持っているのではなく

<%# DataBinder.Eval(Container.DataItem, "State") %>

あなたのaspxページに?

4

5 に答える 5

40

Eval("State")DataBinder.Eval(Container.DataItem, "State")構文の簡略化された形式です。データ バインドされたテンプレート コントロール内でのみ機能します。

詳細については、MSDN ドキュメントを参照してください。

于 2008-11-06T20:58:48.123 に答える
11

違いはありません。「Eval」メソッドは、DataBinder.Eval(Container.DataItem, "blah") メソッドの単なるショートカットです。

于 2008-11-06T20:56:42.383 に答える
10

ドキュメントには、(正確には)実際に呼び出すと、そのタスクはまったく同じ仕事をすることであると記載されていますが、内部と内部には多くの違いがあり<%# Eval %>ます。<%# DataBinder.Eval %>EvalTemplateControl.EvalDataBinder.Eval

それは正しいですが、使用Evalするということは、ASP.NET自体がデータバインドされているオブジェクトを解決することを意味します。これは、Control.DataBind()が呼び出されたときにアイテムが追加されるスタックを使用して内部的に行われます。秘訣はPage、コントロールのプロパティがnullその時点で非である場合にのみこれが発生することです。

解決する必要Pageのあるポイントに到達したときに管理対象スタックが最新でない場合、メソッドは次のようなメッセージで例外を返します。DataItemPage.GetDataItem()

Eval()、、などのデータバインディングメソッドはXPath()Bind()データバインディングコントロールのコンテキストでのみ使用できます。

DataBinder.Evalターゲットオブジェクトを手動で提供するため、このような状況でも機能します。そのため、ASP.NETは独自に解決を行う必要はありません。

于 2013-01-31T10:53:41.230 に答える
4

Eval メソッドは後者の単なるショートカットです

于 2008-11-06T20:57:23.337 に答える
-5

次のコードを見ました

<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %>

だから私は彼らが少し違うと思います。

于 2012-12-10T16:56:51.403 に答える