【问题标题】:ASP.NET Repeater User Control DataSourceASP.NET 中继器用户控件数据源
【发布时间】:2011-11-27 16:08:33
【问题描述】:

我有一个包含转发器的用户控件。似乎无法将数据分配给它的 DataSource 属性,我尝试了几种不同的数据源,但显示以下错误:(我已经调试过,数据源中有数据项)

Object reference not set to an instance of an object

这是中继器的 aspx:

<asp:Repeater ID="repeater1" runat="server" >
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
        <ItemTemplate>
            <li>
                <%# Eval("Name") %>
            </li>
        </ItemTemplate>
    <FooterTemplate>
            </ul>
    </FooterTemplate>
</asp:Repeater>

我在要在其中显示转发器的文件后面的代码中创建了一个用户控件的实例 - 我无法键入 repeater1.DataSource 并在该页面中分配它,因此我向用户控件添加了一个属性以 IEnumerable 作为数据源。

任何想法为什么这不起作用?

【问题讨论】:

  • 您在哪里将数据源分配给转发器?如果由于转发器控件位于用户控件内部而无法从页面分配它,请在用户控件中创建一个类似 SetDataSource 的方法,然后将数据源从页面传递给该方法,该方法会将其分配给转发器。跨度>
  • 感谢您的回复 - 但它给出了同样的错误。

标签: c# asp.net user-controls


【解决方案1】:

您应该在DataBind() 方法中执行此类操作,如下所示:

public override void DataBind()
{
   this.repeater.DataSource = ...
   this.repeater.DataBind();
   ...
}

所以它会在父页面调用Page.DataBind()时绑定

Control.DataBind Method:

使用此方法将数据从源绑定到服务器控件。这 方法通常在通过数据库检索数据集后使用 询问。大多数控件自动执行数据绑定,这意味着 您通常不需要显式调用此方法。

【讨论】:

  • 即使数据源包含项目,错误仍然存​​在。似乎没有调用 override 方法。
  • 我不明白当数据源被设置为包含数据的对象时如何显示此错误?
  • @aspdotnetuser : 你确定问题出在中继器上吗?您能否在 Debug -> Exceptions VS Menu 中启用 CLR 异常并在调试模式下运行(或将调试器附加到 w3wp.exe 进程)并在其他地方查看 pwerhaps 问题
【解决方案2】:

试试这个:在用户控件内部,在 OnLoad() 方法中,中继器位于何处

这样做:

 repeater1.DataSource = MyIEnumerableProperty;
 repeater1.DataBind();

【讨论】:

  • 我试过了,但是在设置 DataSource 的那一行出错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2011-05-24
  • 1970-01-01
相关资源
最近更新 更多