2011-03-04 9 views
2

たとえば、両方の場合で「(名前)」という列のバインディングの違いは何ですか?パフォーマンスの違いはありますか?マークアップでリピータにデータをバインドする方法とプログラムでバインドする方法の違い

1-マークアップリピータItemTemplateに内部あらゆる制御するための制御オブジェクトを定義する

<asp:Label ID="Name_Lbl" runat="server" Text='<%# Eval("Name") %>' ></asp:Label>

2-内のデータを割り当て、それを見つけ、次に、列「名前」のデータを割り当てますそれ

e.Item.FindControl("Name_Lbl")

答えて

4

おそらく、同じ結果を得ることができますが、パフォーマンスは異なる場合があります。データバインド式(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)の文字列として入力すると言います

+0

あなたはあなたが話していることを知っているように見える=)! ..しかし、私はプログラム的に迷ってしまって申し訳ありません。私はGetProductメソッドが何をしなかったのか、どこで定義しましたか(私はBussinessObject Layer、BLL、DAL、Presentation Layerを持っています)私はこれを少し私に明確にしてほしい、またはあなたがその部分について詳細な、または学習目的のチュートリアルを持っていれば、そして私が以前読んだことのあるブログ記事について、あなたに追いつくもう一度読むでしょう...ありがとうございます=)+1 – lKashef

+0

@IKashef、私は例を挙げていました - リピーターを使用している商品のリストを表示するページがあるとしましょう。また、製品データをレイヤー間でやりとりするために使用される「ProductDetails」というビジネスオブジェクト(またはエンティティオブジェクト)があるとします。したがって、あなたのページでは、 'ProductDetails'オブジェクトのリストを返すBLLメソッドを呼び出すでしょうし、このリストをリピータにバインドしています。そのような場合、各リピータ行にバインドされている製品を参照するために、ページコードに 'GetProduct'を作成します。この参照は、実際のバインディングを行うためのマークアップ(ページ)で使用されます。 – VinayC

+0

前のコメントを続ける... 'Eval(" Name ")'(実際には 'DataBinder.Eval(Container.DataItem、" Name ")'のショートカットです)の代わりに、 'GetProduct(Container ).Name'。ここで、 'GetProduct'は実際には現在のリピータ行である' Container'を取り込み、 'DataItem'を' ProductDetails'にキャストして、Evalメソッドの反映を排除します。 – VinayC

0

差なしに、.NETは、バックエンドで同じControlTreeを作成します。この記事では、コンパイル時にASP.NETの内部で何が起こっているのかを説明します。これは古い記事ですが関連性があります。

Compilation and Deployment in ASP.NET 2.0

+0

ごめんなさい、少し質問! ..リピーターのDataBindingイベントではなくページのPage_Loadイベントにリピーターをバインドし、それがポストバックでないかどうかをチェックするので、データがあるときにのみコントロールをバインドできます。マークアップはそれに影響を与えますか?私は強制的にバインドするか何かを意味する! – lKashef

+0

記事をありがとう..何か読んだことがある!! =)(Y) – lKashef

関連する問題