2011-08-03 14 views
0

リピータを使用して共通コントロールをバインドすると、データバインドコントロールが異なる環境でバインドされていない問題が発生しています。ASP.Netデータバインド環境問題

古いものが私のマシンの問題で動作します。

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

と車両項目ユーザーコントロールの内容:データソースのセッターは車両に渡して呼び出されるローカルで

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

は、我々は以下のリピーターを持っています要約エンティティ。

DataSourceプロパティー・セッターでDataSourceSetプロパティーがtrueに設定されています。ローカルでは、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

ローカル対テストでContainer.DataItemの値はどのようになっていますか?彼らは同じですか? また、リピータはどこにテストマシンにバインドされていますか?実際にデータにバインドされていることを確認しましたか? – arviman

+0

pre_renderにバインドされているので、ロード時にも移動しました。同じ結果。 Vehicle Itemコントロール全体を共通のユーザーコントロールからリピーターのItemTemplate内部に移動すると、機能しますが、コードをプロモートして再利用をコントロールしようとしています。 リピーターアイテムテンプレートの「コンテナアイテムID」がレンダリングされ、データバインドされています。 Container Data Itemの値は、ローカルとテストで同じです。同じDBサーバーだけ異なるWebサーバー、彼らも同じ車両IDを出力します。 – Marc

+0

バージョンの問題以外に何が起こっているのかよくわからないですが、あなたのコントロールのオーバーライドされた 'OnDataBinding'メソッドから' base.OnDataBinding(EventArgs.Empty); 'を呼び出そうとしましたか? – arviman

答えて

0

セットアップを実行していた基本プロパティのコードが、車両エンティティのオーバーライドプロパティから呼び出されていないようです。ベースプロパティーをバーチャルとマークすると、コンパイラは実行時に使用するバージョンのを選択します。これは、基本プロパティ設定ツールのコードが、サブクラスのプロパティ設定ツールの前後に実行されることを意味するものではありません。

また、プロパティで実際に「設定」するのは意味がありません。基本コンストラクタに移動したい場合は、基本コンストラクタを呼び出すと実行されます。オブジェクトのコンストラクタです。あるいは、あまり理想的ではないが、オーバーライドプロパティでセットアップを実行することもできます。

リピータのDataSourceプロパティを設定するたびにDataBindイベントが自動的に発生するため、設定コードをOnDataBindingに移動すると、問題が発生します。

関連する問題