【问题标题】:Getting Eval to work in a databound, templated custom control让 Eval 在数据绑定的模板化自定义控件中工作
【发布时间】:2010-09-29 16:25:54
【问题描述】:

上下文

我正在组合一个模板化的数据绑定控件。目前它使用以下语法...

<cc:ItemChooserControl ID="ItemChooser" runat="server">
    <TitleTemplate>
        <h4><%# DataBinder.Eval(Container.DataItem, "DisplayName") %></h4>
    </TitleTemplate>
</cc:ItemChooserControl>

问题

我想要的是更短、更简单的Eval 可以代替。

<h4><%# Eval("DisplayName") %></h4>

然而,当我使用直接 Eval 时,我得到的是一个错误:

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

代码

我正在对自定义 HtmlTableCell 进行数据绑定...

public class TitleTemplateTableCell: HtmlTableCell, INamingContainer
{
    private object m_DataItem;

    public virtual object DataItem
    {
        get { return m_DataItem; }
        set { m_DataItem = value; }
    }
}

使用以下自定义 DataBind(已删除无关代码)...

foreach (object dataItem in dataSource) {
    TitleTemplateTableCell title = new TitleTemplateTableCell();
    TitleTemplate.InstantiateIn(title);    // TitleTemplate is the template property
    title.DataItem = dataItem;
    title.DataBind();
 }

【问题讨论】:

    标签: c# asp.net data-binding datatemplate itemplate


    【解决方案1】:

    HtmlTable 单元格属于 HtmlContainerControl,它没有从其他数据控件 WebControls 所做的通用 DataBoundControl 继承,例如 GridView。因此,您收到此错误;它不是 DataBoundControl。

    【讨论】:

    • 嗯,好吧,所以我没有成功地尝试我认为的修复方法。我该如何解决?
    • 了解如何创建您自己的自定义数据绑定控件
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多