2010-03-18 71 views
0

我有一個VS2005 ASP.Net頁面上有一箇中繼器的客戶。在asp.net中的數據綁定表達式

下面以中繼器的顯示出來:

<span><%# Eval(GetAdLinks((Customer)Container.DataItem)) %></span> 

的GetAdLinks是在它的後面返回表示爲字符串的控制代碼中的保護方法。這可能嗎?

我收到說客戶不包含屬性與名稱的錯誤...

任何想法?

+0

能否請您發佈的GetAdLinks方法的簽名? – 2010-03-18 15:18:52

回答

0

如果是客戶端(無runat =「server」)控件,則應該可以。但是你不應該把它包含在Eval()中。我猜它應該看起來有點像這樣:

<%# GetAdLinks(Container.DataItem) %> 

的GetAdLinks方法應該被重構接受的Container.DataItem作爲一個DataRowView的對象。在該方法內部,您可以將其轉換爲Customer對象,您可以通過一些調試來找出它。

祝你好運!

1

更好的做法是將Literal添加到您的Repeater模板中,然後實施OnDataBinding方法。這正是Literal的用途。

下面是一個例子:

<asp:Literal ID="litYourControl" runat="server" OnDataBinding="litYourControl_DataBinding" /> 

然後在你的代碼隱藏實現它:

protected void litYourControl(object sender, System.EventArgs e) 
{ 
    Literal lt = (Literal)(sender); 
    // Not sure what field you are binding to based on the example in your question 
    // so I will just make an assumption. 
    Customer cus = (Customer)(Eval("Container.DataItem")); 
    lt.Text = GetAdLinks(cus); 
}