2010-03-18 37 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); 
}