5

コントロールを使用したデータ バインディングに関するasp:RepeaterMicrosoft の紹介では、値を取得するための構文が示されています。

<b><%# DataBinder.Eval(Container.DataItem, "orderid") %></b>

この構文は、ASP.netRepeaterコントロールの他の紹介でも繰り返されます。

<a href="<%# DataBinder.Eval(Container.DataItem, "URL") %>">...</a>

しかし、この構文が「悪い」「間違っている」ことを覚えています。MSDNのドキュメントからDataBinder.Evali see:

ここに画像の説明を入力 ノート

このメソッドは実行時にリフレクションを使用してレイト バインド評価を実行するため、標準の ASP.NET データ バインディング構文と比較してパフォーマンスが著しく低下する可能性があります。

(強調を追加)

というわけで、 「悪い」という記憶を持っていた理由が説明できます。しかし、「標準の ASP.NET データ バインディング構文」とは何ですか?Eval

ボーナスリーディング

4

3 に答える 3

3

「遅延バインディング」のペナルティを回避するためにキャストを行うことができると思います:

<%# (((System.Data.DataRowView)Container.DataItem)["URL"]) %>

ここで、パフォーマンスを x% 向上させたとします。あなたのアプリケーションにとってそれは価値がありますか?(私の意見では) トレードオフは読みやすさです。

于 2012-05-14T18:15:53.580 に答える
1

「標準のASP.NETデータバインディング」とは、通常、データソースから、フォーム上のテキストボックスやテーブル全体をバインドできる古いGridViewなどの名前付きコントロールにデータをバインドすることを指します。

データの読み取り専用表示が必要な場合は、foreachループまたはDataReaderを使用して、stringBuilderでデータを生のHTMLに解析し、S​​tringBuilderをリテラルにダンプすることを検討してください。

于 2012-05-14T18:41:44.090 に答える
0

この MSDN ページでは、標準的なデータバインディング構文について次のように説明しています。

たとえば、次のコード フラグメントでは、整数が通貨文字列として表示されます。標準の ASP.NET データ バインディング構文では、データ フィールド IntegerValue を取得するために、最初にデータ行の型をキャストする必要があります。次に、これが引数として String.Format メソッドに渡されます。

<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %> 
于 2012-05-14T18:47:23.133 に答える