asp.net 中的 DataBinder.Eval 错误

发布于 2024-12-13 15:33:47 字数 1462 浏览 0 评论 0原文

我创建了一个类来执行一些工作,例如 GridView 继承自 System.Web.UI.WebControls.WebControl。

public class IHGridView : System.Web.UI.WebControls.WebControl
{
    // inside here, actually return Repeater class.


    protected override void OnInit(EventArgs e)
    {
        _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns);
        this.Controls.Add(_repeater);
    }
}

我还在 IHGridView 中为我的中继器创建了 ItemTemplate。

public class IHGridItemTemplate : ITemplate
{
}

IHGridView 类返回 Repeater 和一些 html 代码,但为了方便开发,我创建了一些东西。

public class Columns : StateManagedCollection
{
}

public class IHBoundFieldBase : IStateManager
{
}

public class IHLabelField : IHBoundFieldBase
{
}

现在在我的 aspx 中,我可以像下面这样使用它:

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View">
    <Columns>
         <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" />
    </Columns>
</cc1:IHGridView>

现在我遇到了一个问题。 我无法在 aspx 中使用 DataBinder.Eval。

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' />

这给了我一个错误。 错误消息如下: CS1061:“System.Web.UI.Control”中没有“DataItem”的定义。 “System.Web.UI.Control”的第一个参数中没有可扩展方法“DataItem”。请检查是否有使用标题或程序集参考。这是用韩文写的,但我翻译成英文。 有人能给我解决这个问题的线索吗?

I have created a class doing some jobs like GridView inherit from System.Web.UI.WebControls.WebControl.

public class IHGridView : System.Web.UI.WebControls.WebControl
{
    // inside here, actually return Repeater class.


    protected override void OnInit(EventArgs e)
    {
        _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns);
        this.Controls.Add(_repeater);
    }
}

I also created ItemTemplate for my repeater in IHGridView.

public class IHGridItemTemplate : ITemplate
{
}

IHGridView class returns Repeater and some html codes, but in convenience to deveop I have created some stuff.

public class Columns : StateManagedCollection
{
}

public class IHBoundFieldBase : IStateManager
{
}

public class IHLabelField : IHBoundFieldBase
{
}

Now in my aspx, I can use this like below:

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View">
    <Columns>
         <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" />
    </Columns>
</cc1:IHGridView>

Now I come up with a problem.
I cannot use DataBinder.Eval in aspx.

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' />

This gives me an error.
The error message is below: CS1061: There is no definition of 'DataItem' in 'System.Web.UI.Control'. There is no extendable method 'DataItem' in 'System.Web.UI.Control''s first argument. Please check if there is using rubric or assembly reference. This was written in Korean, but I translated into English.
Could anyone give me a clue to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她比我温柔 2024-12-20 15:33:47

在模板化控件中,模板在容器中实例化。为了使数据绑定在模板化字段中工作,建议容器应实现 IDataItemContainer 接口 - 接口实现应该提供数据项。

AFAIK,为了支持数据绑定表达式,ASP.NET 解析器为控件(其属性使用这些表达式)注入 DataBinding 事件的处理程序,然后在处理程序中,它生成在中查找数据项的代码容器。

因此,在您的示例中,如果您希望在 IHLabelField.Text 属性中使用数据绑定表达式,则控件的命名容器应实现 IDataItemContainer 或应具有 DataItem 属性。因此,在这种情况下,您可能需要 IHGridView 控件上的 DataItem - 但它不会按您想要的方式工作。

In templated controls, the template is instantiated in the container. For data-binding to work in the templated fields, its recommended that container should implement IDataItemContainer interface - the interface implementation should be supplying the data-item.

AFAIK, to support data binding expressions, ASP.NET parser injects handler for DataBinding event for the control (whose properties uses these expressions) and then in the handler, it generates code that looks for data-item in the container.

So in your example, if you wish to use data-binding expression in the IHLabelField.Text property then the control's naming container should either implement IDataItemContainer or should have DataItem property. So in this case, you will probably need DataItem on IHGridView control - and it wouldn't work the way you want.

一百个冬季 2024-12-20 15:33:47

这是我们使用的一个例子。我希望它有帮助

   <asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'

here is an example we used. i hope it helps

   <asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文