2012-12-10 33 views
0
<asp:Repeater ..> 
<ItemTemplate> 
<% string age = Eval("a").ToString() %> 

<% 
    age = a.ToLower(); // real stuff here 
%> 

<p>Hello <%# Eval("name") %> you are <%= age %> old</p> 

</ItemTemplate>  
</asp:Repeater> 

我收到一個錯誤說:如何獲取中繼器itemtemplate中的值?

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control. 

回答

1

使用<%# Eval("<propertyName>") %>

當然,你將有一個DataSource分配給您的中繼器,並調用DataBind()

,不需要使用這些內聯編碼,您可以將整個邏輯封裝到數據項的自定義屬性中。例如,在上面的代碼,你可以創建一個自定義屬性說,Age,如:

partial class YourDataItemClass // use partial if it is auto-generated 
{ 
    public string Age 
    { 
     var ageStr = a.ToString(); // assuming YourDataItemClass has an `a` var/property 
     // Do real stuff here 
     ... 
     ... 
     var lowered = ageStr.ToLower(); 
     ... 
     ... 
     return lowered; 
    } 
} 

,並可以公開像Repeater控件內部的屬性:

<asp:Repeater id="myRepeater" ..> 
<ItemTemplate> 
    <p>Hello <%# Eval("Name") %> you are <%# Eval("Age") %> old</p> 
</ItemTemplate>  
</asp:Repeater> 

指定數據源和數據綁定中繼器在某處隱藏代碼,如:

... 
// Call the method which provides you the data 
// IEnumerable<YourDataItemClass> myData = ... ; 
myRepeater.DataSource = myData; 
myRepeater.DataBind(); 
... 
+0

我想這是內聯,而不是代碼隱藏在所有。 – loyalflow

0
<asp:Repeater> 
<ItemTemplate> 
<p>Hello <%# Eval("name") %> you are <%# Convert.ToString(Eval("a")).ToLower() %> old</p> 

</ItemTemplate>  
</asp:Repeater> 
+0

我想從Eval(「a」) – loyalflow

+0

中分配一個變量,然後將數據放入標籤中並在RowDatabound中從標籤中獲取值。 – Hiral

相關問題