ASP.Net数据绑定环境问题

时间:2011-08-03 17:53:04

标签: asp.net data-binding

使用转发器对公共控件进行数据绑定时,我们遇到了数据绑定控件未在不同环境中绑定的问题。

旧版本适用于我的机器问题。

我们有以下转发器:

<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

1 个答案:

答案 0 :(得分:0)

看起来你的基本属性中执行设置的代码没有被调用,因为你的车辆实体的覆盖属性。将基本属性标记为 virtual 只会使编译器选择在运行时需要使用的版本的属性。这并不意味着base属性setter的代码在子类`属性设置器之前/之后运行。

此外,在属性中实际执行任何“设置”没有意义,理想情况下,您希望将其移动到基础构造函数,如果从对象调用基础构造函数,它将被执行构造函数。或者不太理想,您也可以在覆盖属性中执行设置。

将设置代码移至OnDataBinding适用于您,因为只要您设置转发器的DataBind属性,就会自动触发DataSource事件。