ASP.Net数据绑定环境问题

ASP.Net数据绑定环境问题,asp.net,data-binding,Asp.net,Data Binding,使用中继器对公共控件进行数据绑定时,我们遇到了数据绑定控件未在不同环境中绑定的问题 旧机器在我的机器问题上起作用 我们有以下中继器: <web:Repeater ID="rptVehicles" runat="server" DataType="Entities.VehicleSummary" OnItemDataBound="rptItemList_OnItemDataBound"> <ItemTemplate> <div style="display:n

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

旧机器在我的机器问题上起作用

我们有以下中继器:

<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>

集装箱项目=

容器项目Id=

容器项目Id=

以及车辆项目用户控件的内容:

<div class="m-vitem">
<div style="display:none">
    <p>DataSourceSet = <%# this.DataSourceSet %></p>
    <p>Item DataSource = <%# (this.DataSource == null)? "null" : "not null" %></p>
</div>

数据源集=

项目数据源=

在本地,通过车辆摘要实体调用数据源设置程序

DataSourceSet属性在DataSource属性设置器中设置为true,在本地测试其false时,其输出为true

我们在本地和测试环境中使用不同的.Net版本,是否有人知道版本之间的数据绑定处理和可以执行的操作是否存在任何差异,或者我是不是找错了方向

本地-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

由于车辆实体上的覆盖属性,似乎未调用执行设置的基本属性中的代码。将基本属性标记为虚拟只会使编译器选择在运行时需要使用的属性版本。这并不意味着基本属性设置器的代码在子类`属性设置器'之前/之后运行

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


将设置代码移动到
OnDataBinding
对您很有用,因为每当您设置中继器的
DataSource
属性时,
DataBind
事件将自动触发。

您从本地与测试中获得的Container.DataItem值是多少?它们是一样的吗?另外,中继器在测试机上绑定在哪里?你确定它确实绑定到数据了吗?它在pre_渲染时绑定,我也将它移动到了加载时。同样的结果。如果我将整个Vehicle Item控件从公共用户控件移动到中继器的ItemTemplate中,它可以工作,但我们正在尝试促进代码和控件的重用。正在呈现repeaters项模板中的“容器项Id”,因此它是数据绑定的。容器数据项的值在本地和测试上相同。相同的DB服务器只是不同的Web服务器,它们也输出相同的车辆id。除了版本问题之外,我不完全确定为什么会发生这种情况,但您是否尝试调用
base.OnDataBinding(EventArgs.Empty)来自控件中被重写的
OnDataBinding
方法?只是厌倦了,同样的问题。然而,我已经缩小了它的范围,特别是与“DataSource”属性有关。如果我在名为“DataSourceB”的用户控件上添加了另一个相同类型的属性,然后传入Container.DataItem,它就可以工作,而不是“DataSource”。我现在正在复习。好的,越来越近了,我正在覆盖车辆项目用户控件上的“DataSource”属性,它正确地调用了base,但是setter中需要一些额外的设置。但是,如果删除覆盖,它会工作,但附加设置不会完成。如果您想知道为什么重写该属性会导致它不进行数据绑定,那么基本属性将被标记为virtual。