【问题标题】:ListView FindControl errorListView FindControl 错误
【发布时间】:2011-11-12 18:17:12
【问题描述】:

我有下一个错误:

System.NullReferenceException – 对象引用未设置为对象的实例。

到下一个代码:

<asp:ListView ID="LV1"  runat="server" DataSourceID="LinqDataSource">
  <ItemTemplate>
     <asp:Image ID="Image1" Width="100px" Height="100px" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' />
     //....and so on till the 
</asp:ListView>

后面的代码:

protected void checkTheImage()
{
    ((Image)LV1.FindControl("Image1")).ImageUrl = "(noImage.jpg)" ;
}

以及 page_load 上的代码:

protected void Page_Load(object sender, EventArgs e)
{
    checkTheImage();
}

为什么我得到了错误?我的代码有什么问题?

【问题讨论】:

  • 我的猜测是,当您调用 checkTheImage() 时,ListView 数据绑定实际上并没有发生(即为时过早)。您可以使用在页面生命周期后期发生的事件(例如 Page_PreRender)来快速测试这一点。编辑:再想一想,这可能还为时过早,而是尝试处理 ListView.Databound 事件,并在那里尝试您的代码。
  • 我同意 Daniel B 的观点。你应该阅读this
  • 当我编写 Page_PreRender 时问题解决了。伟大的 !谢谢

标签: c# asp.net listview findcontrol


【解决方案1】:

您必须指定项目:

protected void checkTheImage()
{
    ((Image)LV1.Items[0].FindControl("Image1")).ImageUrl = "(noImage.jpg)" ;
}

因为 ListView 为每个子项呈现一个 Image1 控件。要更改所有图像:

protected void checkTheImage()
{
   foreach(ListViewItem item in LV1.Items)
      ((Image)item.FindControl("Image1")).ImageUrl = "(noImage.jpg)" ;
}

【讨论】:

  • 谢谢。现在我没有收到错误...但它不显示 noImage.jpg ...为什么?
  • 当我编写 Page_PreRender 时问题解决了。伟大的 !谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多