使用转发器对公共控件进行数据绑定时,我们遇到了数据绑定控件未在不同环境中绑定的问题。
旧版本适用于我的机器问题。
我们有以下转发器:
<web:Repeater ID="rptVehicles" runat="server" DataType="Entities.VehicleSummary" OnItemDataBound="rptItemList_OnItemDataBound">
<ItemTemplate>
<div style="display:none">
<p>Container Item = <%# (Container.DataItem == null) ? "null" : "not null" %></p>
<p>Container Item Id = <%# (Container.DataItem.ID == null) ? "null" : "not null" %></p>
<p>Container Item Id = <%# Container.DataItem.ID %></p>
</div>
<common:VehicleItem runat="server" ID="itmVehicle" DataSource="<%# Container.DataItem %>" ImageDefinition="<%# this.ImageDefinition %>" />
</ItemTemplate>
</web:Repeater>
Vehicle Item用户控件的内容:
<div class="m-vitem">
<div style="display:none">
<p>DataSourceSet = <%# this.DataSourceSet %></p>
<p>Item DataSource = <%# (this.DataSource == null)? "null" : "not null" %></p>
</div>
在本地,数据源设置器被调用传递到Vehicle Summary实体。
DataSourceSet属性在DataSource属性setter中设置为true,在local上,在测试其false时输出为true。
我们在本地和测试环境中使用不同的.Net版本,有没有人知道版本之间的数据绑定处理和可以做什么有什么不同,或者我是在咆哮错误的树?
LOCAL - Microsoft .NET Framework版本:2.0.50727.4961; ASP.NET版本:2.0.50727.4955 测试 - Microsoft .NET Framework版本:2.0.50727.3082; ASP.NET版本:2.0.50727.3082
答案 0 :(得分:0)
看起来你的基本属性中执行设置的代码没有被调用,因为你的车辆实体的覆盖属性。将基本属性标记为 virtual 只会使编译器选择在运行时需要使用的版本的属性。这并不意味着base属性setter的代码在子类`属性设置器之前/之后运行。
此外,在属性中实际执行任何“设置”没有意义,理想情况下,您希望将其移动到基础构造函数,如果从对象调用基础构造函数,它将被执行构造函数。或者不太理想,您也可以在覆盖属性中执行设置。
将设置代码移至OnDataBinding
适用于您,因为只要您设置转发器的DataBind
属性,就会自动触发DataSource
事件。