2012-03-09 50 views
0

我正在使用<%#Eval("sectionId") %>數據綁定表達式將數據綁定到我的代碼前置。 我在我的代碼behinde使用下面的代碼設置此sectionId,Eval()顯示空值

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(); 

        } 
       } 
      } 
     } 
    } 

凡在我.aspx頁面中我有這樣的代碼,

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

爲sectionId每次值已成功設置在代碼behinde但它不會反映在UI page.every時間我得到喜歡的鏈接,

SectionWiseProduct.aspx?secId= 

任何人可以請建議是我這樣做對還是我有沒有其他的方式來做到這一點。 而且page_Load會調用兩次,這是因爲Eval嗎?

回答

0

,讓您的代碼的變化,將工作

public string sectionId = string.Empty; 

希望這有助於!

0

最小化呼叫至的DataBinder.Eval

的方法DataBinder.Eval方法使用反射,以評估在傳遞和返回結果的爭論。如果您有一個包含100行和10列的表,則如果您在每列上使用DataBinder.Eval,則調用DataBinder.Eval 1000次。在這種情況下,您使用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事件可能更有效。通過使用此事件,您只能執行一次類型轉換。以下示例使用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"])); 
}