【问题标题】:Why can't I access to a UserControl custom property inside a Repeater?为什么我无法访问中继器内的 UserControl 自定义属性?
【发布时间】:2015-07-09 15:08:20
【问题描述】:

我正在为中继器进行数据绑定:

<asp:Repeater ID="rptAlumni" runat="server" OnItemDataBound="rptAlumni_DataBinding">
    <ItemTemplate>
        <uc1:AlumnoBox runat="server" ID="AlumnoBox" />
    </ItemTemplate>
</asp:Repeater>

protected void rptAlumni_DataBinding(object sender, RepeaterItemEventArgs e)
{
    var item = (UserControl)e.Item.FindControl("AlumnoBox");
}

但我不能做 item.MyCustomID 例如,我看不到那个属性。相反,如果我将 UserControl 移到Repeater 之外并在页面加载中执行AlumnoBox.MyCustomID,它也可以正常工作。

我哪里错了?

【问题讨论】:

    标签: c# .net webforms user-controls repeater


    【解决方案1】:

    您的UserControl 继承自UserControl,但您添加了其他属性,例如MyCustomID。当然,如果您转换为UserControl,您将无法访问这些属性,因为基类不知道它们。而是转换为正确的类型AlumnoBox

    var item = (context_box_AlumnoBox) e.Item.FindControl("AlumnoBox"); 
    int id = item.MyCustomID;
    

    【讨论】:

    • 我做不到(AlumnoBox)e.Item.FindControl("AlumnoBox")。它不知道AlumnoBox 类型(因为它只是UserControl 的名称)。
    • @markzzz:然后使用该类型的正确名称。你在某处创建了这个UserControl,查看代码隐藏类,在那里你可以找到它的名称。
    • 那是该类型的正确名称 :) &lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="AlumnoBox.ascx.cs" Inherits="context_box_AlumnoBox" %&gt;public partial class context_box_AlumnoBox : System.Web.UI.UserControl
    • 它说我缺少“使用”或一些“程序集”:O 我刚刚使用 Visual Studio 创建它...
    • @markzzz:使用context_box_AlumnoBox。我已经编辑了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多