1

一方向のdatabindEval関数はクラスに属し、式が評価されるオブジェクト参照を解決するメソッドを使用してメソッドを呼び出すメソッドをDataBinder介してページからアクセスできます。TemplateControl.EvalDataBinder.EvalGetDataItem

OK ...では、双方向のデータバインドBind関数はどのように機能しますか?どのクラスに属していますか?

4

2 に答える 2

1

私が知る限り、「バインド」はメソッドではなく、言語構造です。
ソースと詳細情報:http ://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx

于 2011-10-23T13:00:29.350 に答える
1

リフレクターを使っても、Bind()メソッドはどこにも見つかりませんでした。

---TextBoxes(「双方向データバインディング」とも呼ばれます)などの読み取り/書き込み値の場合は、Bind()ステートメントを使用できます。そのBind()ステートメントはどこから来たのですか?

具体的には、ASP.NETにはbindメソッドはありません。ASP.NETがファイルを解析し、使用していることを確認databinding expression (in the angle-bracket-percent-pound format, "<%# %>")すると、バインド構文を解析するための特殊なケースのコードがあり、そのための特殊なコードが生成されます。使用する場合、<%# Bind("Name") %>それは実際の関数呼び出しではありません。

ASP.NETがコードを解析し、Bind()ステートメントを検出すると、ステートメントを2つの部分に分割します。最初の部分は一方向のデータバインディング部分であり、最終的には通常のEval()呼び出しになります。2番目の部分は逆の部分です。これは通常、その行に沿ったコードで、"string name = TextBox1.Text"バインドされた場所から値を取得します。

Non-Bind()データバインディングステートメントはリテラルコード(CodeDomではCodeSnippetExpressionsを使用)であるため、選択した言語の任意のコードが許可されます。ただし、ASP.NETはBind()ステートメントを解析する必要があるため、双方向データバインディングはBind()以外のものをサポートしていません。たとえば、次の構文は、任意のコードを呼び出すと同時にBind()を使用しようとするため、無効です。<%# FormatNameHelper(Bind("Name")) %>

双方向データバインディングでサポートされているフォーマットは、Bind( "field")とBind( "field"、 "format string {0}")のみです。これらの構文例には、二重引用符だけでなく一重引用符の使用を許可するなど、非常に小さなバリエーションがいくつかあります。ASP.NETでサポートされている言語の中には、一方の形式を他方よりも優先するものがあるため、使用している言語が1つしかサポートしていない場合でも、両方の形式をサポートする必要があります。

于 2011-10-23T13:53:16.183 に答える