おそらく、同じ結果を得ることができますが、パフォーマンスは異なる場合があります。データバインド式(Eval
)は、フードの下で反射を使用してデータをバインドしますが、FindControl
はコントロールツリーを走査して必要な制御を見つけます。リフレクションにはパフォーマンスのコストがかかります(あなたが見ているプロパティ/名前の数に応じて、プロパティ記述子が一度キャッシュされていても参照できます)。一方、コントロールツリーウォークアップのオーバーヘッドは、コントロールツリーの深さによって異なります。
データバインディング構文はより洗練されており、パフォーマンスは相対的な観点から見る必要があります。合計リクエスト時間と比較してどれくらい余計に費やしていますか。したがって、データバインディングコストは他のアクティビティ実際にデータをフェッチするなどです。反射を避けるデータバインディングにばらつきがあると述べました - http://weblogs.asp.net/jgalloway/archive/2005/09/20/425687.aspxを参照してください。
多くの場合、使いやすさのために強く型付けされたプロパティを提供するコードビハインドプロパティを使用します。リピータは、コードビハインドで、エンティティクラスProductDetailsの配列/リスト/列挙して結合している場合たとえば、私はそのような
protected ProductDetails GetProduct(RepeaterItem container)
{
return (ProductDetails)container.DataItem;
}
マークアップでは、
<asp:Label ID="Name_Lbl" runat="server" Text='<%# GetProduct(Container).Name %>' ></asp:Label>
ないようメソッドを使用しますあなたはインテリセンスをGetProduct(Container)
の文字列として入力すると言います
あなたはあなたが話していることを知っているように見える=)! ..しかし、私はプログラム的に迷ってしまって申し訳ありません。私はGetProductメソッドが何をしなかったのか、どこで定義しましたか(私はBussinessObject Layer、BLL、DAL、Presentation Layerを持っています)私はこれを少し私に明確にしてほしい、またはあなたがその部分について詳細な、または学習目的のチュートリアルを持っていれば、そして私が以前読んだことのあるブログ記事について、あなたに追いつくもう一度読むでしょう...ありがとうございます=)+1 – lKashef
@IKashef、私は例を挙げていました - リピーターを使用している商品のリストを表示するページがあるとしましょう。また、製品データをレイヤー間でやりとりするために使用される「ProductDetails」というビジネスオブジェクト(またはエンティティオブジェクト)があるとします。したがって、あなたのページでは、 'ProductDetails'オブジェクトのリストを返すBLLメソッドを呼び出すでしょうし、このリストをリピータにバインドしています。そのような場合、各リピータ行にバインドされている製品を参照するために、ページコードに 'GetProduct'を作成します。この参照は、実際のバインディングを行うためのマークアップ(ページ)で使用されます。 – VinayC
前のコメントを続ける... 'Eval(" Name ")'(実際には 'DataBinder.Eval(Container.DataItem、" Name ")'のショートカットです)の代わりに、 'GetProduct(Container ).Name'。ここで、 'GetProduct'は実際には現在のリピータ行である' Container'を取り込み、 'DataItem'を' ProductDetails'にキャストして、Evalメソッドの反映を排除します。 – VinayC