在我这样做之前,我想我会问这是否是最好的方法。每个“供应商”对象都有一个“桶”对象。在我的转发器中,我需要显示一些来自供应商的属性和一些来自 Bucket 的属性,还有一些由 FileSystem 填充的与供应商链接的图像。我认为最好的方法是将转发器与供应商对象绑定,然后在 ItemDataBound 上,我将根据绑定到特定 Items[e.Item.ItemIndex] 的供应商填充图像和存储桶。
这是解决这个问题的最好方法吗?
这就是我通常的做法,绑定主对象并处理 ItemDataBound 中的细节。
如果 Vendor 对象只能容纳单个 Bucket 对象,则可能适合将其全部绑定到单个顶级转发器中。您可以在顶层通过简单的数据绑定访问 Bucket,而无需覆盖 ItemDataBound。
因为您最有可能绑定“供应商”,所以如果您想这样做,您可以在数据绑定中访问它的成员:
<%# DataBinder.Eval (Container.DataItem, "Bucket.Property" ) %>
如果您必须在每次绑定迭代期间“处理某些内容”并且需要对每个 Vendor 对象进行详细访问以进行决策,则您希望执行 ItemDataBound。
如果 Vendor 对象可以容纳多个 Bucket,那么访问它的最佳方法是通过 ItemDataBound。在供应商的每次迭代中,您可以绑定一个新的嵌套转发器以显示存储桶数据,或执行您可能需要的任何重复/聚合功能。
根据您希望它在客户端上的行为方式,您可以只呈现供应商。当用户单击供应商(或其他)时,您可以对服务器执行 AJAX 调用,该调用将检索存储桶数据并将其动态呈现到您的页面中。如果有大量供应商以及他们的桶被渲染,您可能想尝试这种方法。与在 ASPX 服务器端构建它相比,这将有助于提高数据库性能和页面呈现时间。(但这需要大量数据,在尝试获得性能提升之前,您应该出于可用性/客户原因这样做。)