多くの例や人々が、Web フォームを使用するときに OnDataBinding イベントを実装するのではなく、aspx コードでインライン データ バインディングを使用することを好む理由を確認するために、この質問をすると思いました。
データバインドされたコントロール (例: Repeater、GridView など)の場合、すぐに使えるように組み込まれていないことを行う必要がある場合 (例: Eval を実行する必要がある場合)、フィールド レベル コントロールの OnDataBinding メソッドを常に実装します。私が目にするほとんどの例では、インライン <%# 構文を使用して aspx ページにコードが含まれています。
インライン ASP.NET コードの例:
<asp:Literal ID="litExample" runat="server"
Text='<%# Eval("ExampleField").ToString() %>' />
私が好む方法の例:
aspx で:
<asp:Literal ID="litExample" runat="server"
OnDataBinding="litExample_DataBinding" />
コードビハインド .cs:
protected void litExample_DataBinding(object sender, System.EventArgs e)
{
Literal lit = (Literal)(sender);
lit.Text = string.Format("{1} - {2}",
Eval("ExampleField").ToString(),
Eval("ExampleField2").ToString());
}
私は個人的に分離コード方式を好みます。これにより、aspx ページがクリーンに保たれ、このインライン コードがあちこちにあるわけではなく、次の人はコードの変更を常に .cs ファイルで確認することを知っているからです。HTML はプレースホルダーのみであり、codebind は実際に何を制御するかを決定するため、プレゼンテーションとコードの分離もこの方法でより適切に維持されます。
これらは非常に基本的な例です。フィールドは、先頭に 0 を付けてフォーマットする整数、または特定のフォーマットが必要な DateTime などにすることができます。「Text」プロパティに格納する必要がある最終値を取得するために、あらゆる種類の操作とコードが必要になる場合もあります。終わり。
インライン コードを使用している場合、どこに線を引いてコード ビハインドに移動しますか?
どちらの方法で行う場合の長所と短所は何ですか?
一方が他方よりも多くのオーバーヘッドを必要としますか?
編集注:ページ上にあるコントロールに値を割り当てることについて話しているのではありませんが、リピーターテンプレートまたはグリッドビューアイテムテンプレートなどに存在するため、データバインドされているコントロールに値を割り当てることについては話していません...明らかに、あなたがページに座っているリテラルコードで割り当てることができます。
編集注:特にオーバーヘッドに関しては、より多くの応答を収集すると思いました。ほとんどの人は OnDataBinding イベントを使用しませんか?