我有一个VS2005 ASP.Net页面,其上有一个客户转发器。
以下内容显示在转发器中:
<span><%# Eval(GetAdLinks((Customer)Container.DataItem)) %></span>
GetAdLinks是一个受保护的方法,后面的代码返回一个表示为字符串的控件。这可能吗?
我收到一条错误消息,指出客户不包含名称为...的属性
有什么想法吗?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
如果它是客户端(没有runat =“server”)控件,那么它应该是可能的。但是你不应该把它包含在Eval()中。我猜它应该看起来像这样:
<%# GetAdLinks(Container.DataItem) %>
应重构GetAdLinks方法以将Container.DataItem接受为DataRowView对象。在方法内部,您可以将其强制转换为Customer对象,您可以通过一些调试来解决它。
祝你好运!