2012-03-09 11 views
0

私は<%#Eval("sectionId") %>データバインディング式を使用してデータを自分のコードインフロントにバインドしています。 私は、次のコードを使用してbehinde私のコードにセクションIDのためのたびに値がで正常に設定されているnull値を示すEval()

<a href="SectionWiseProduct.aspx?secId=<%#Eval("sectionId") %>">Enviro Section</a> 

私の.aspxページに、私はこのようなコードを持って

public partial class ProductDetails : System.Web.UI.Page 
    { 
     private string sectionId = string.Empty;   

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       if (Request.QueryString.Count > 0) 
       { 
        if (Request.QueryString["secId"] != null || Request.QueryString["prodId"] != null) 
        { 
         sectionId = Request.QueryString["secId"].ToString(); 

        } 
       } 
      } 
     } 
    } 

を、このセクションIDを設定していますコードbehindeが、それは私が

SectionWiseProduct.aspx?secId= 

、のようなリンクを取得しています誰もが提案してくださいすることができ、私は右またはIをやっているUIのpage.every時間には反映されませんそこにそれを行うための他の方法があります。 また、page_Load呼び出しは2回ですが、これはEvalのためですか?

答えて

0

は、このことができます

public string sectionId = string.Empty; 

希望に動作します、あなたのコード内でその変更を行います!

0

DataBinder.Evalメソッドが渡される引数を評価し、結果を返すためにリフレクションを使用していますDataBinder.Eval

への呼び出しを最小限に抑えます。 100行10列のテーブルがある場合は、各列でDataBinder.Evalを使用すると、DataBinder.Evalを1,000回呼び出します。このシナリオでは、DataBinder.Evalを使用する選択肢に1,000倍が乗算されます。データバインディング操作中にDataBinder.Evalの使用を制限すると、ページのパフォーマンスが大幅に向上します。 DataBinder.Evalを使用して、Repeaterコントロール内の次のItemTemplate要素を検討してください。

<ItemTemplate> 
    <tr> 
    <td><%# DataBinder.Eval(Container.DataItem,"field1") %></td> 
    <td><%# DataBinder.Eval(Container.DataItem,"field2") %></td> 
    </tr> 
</ItemTemplate> 

このシナリオでは、DataBinder.Evalを使用する代わりに使用できます。代替案には以下が含まれます:

明示的キャストを使用してください。明示的キャストを使用すると、リフレクションのコストを回避することでパフォーマンスが向上します。 Container.DataItemをDataRowViewとしてキャストします。

<ItemTemplate> 
    <tr> 
    <td><%# ((DataRowView)Container.DataItem)["field1"] %></td> 
    <td><%# ((DataRowView)Container.DataItem)["field2"] %></td> 
    </tr> 
</ItemTemplate> 

あなたがコントロールをバインドし、データを取得するための特殊な方法を使用してDataReaderを使用する場合は、明示的なキャストとのより良いパフォーマンスを得ることができます。 Container.DataItemをDbDataRecordとしてキャストします。

<ItemTemplate> 
    <tr> 
    <td><%# ((DbDataRecord)Container.DataItem).GetString(0) %></td> 
    <td><%# ((DbDataRecord)Container.DataItem).GetInt(1) %></td> 
    </tr> 
</ItemTemplate> 

明示的なキャストは、バインド先のデータソースの種類によって異なります。前のコードは例を示しています。

ItemDataBoundイベントを使用します。データバインドされているレコードに多数のフィールドが含まれている場合は、ItemDataBoundイベントを使用する方が効率的です。このイベントを使用すると、型変換は1回だけ実行されます。次のサンプルでは、​​DataSetオブジェクトを使用しています。

protected void Repeater_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    DataRowView drv = (DataRowView)e.Item.DataItem; 
    Response.Write(string.Format("<td>{0}</td>",drv["field1"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field2"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field3"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field4"])); 
} 
+0

、お返事ありがとうございました。あなたは私がデータをプレーンHTMLコントロールにバインドできる任意のソリューションを提案できますか?私は ''タグにデータをバインドしたいと思います。 –

関連する問題