その ListView 内のコントロールがデータバインディングである順序に問題があるという ASP.Net ListView コントロールがあります。簡単な質問は、部分的なポストバックでは、リストビュー InsertItemTemplate 内にあるドロップダウンリストがリストビューの前にデータバインディングされ、問題が発生することです。.Net 3.5 コードでは正常に動作しているように見えるのに、なぜこのようなことが起こるのでしょうか?
いくつかの背景: 私たちはソフトウェアを稼働させ、.Net 3.5 で動作させましたが、問題なく動作しました。.Net 4.5 への移行に取り組んでおり、いくつかの問題が発生しています。以下のようなコントロールがあり、最初のロードで正常にロードされます。ただし、たとえば、編集ボタンの1つをクリックすると、最初のロードの後、ListViewの前にDropDownListのデータバインドが行われます。
<asp:ListView ID="ListView_Temp" runat="server" DataSourceID="ObjectDataSource_TempBLL"
DataKeyNames="Id”" InsertItemPosition="FirstItem"
OnDataBinding="ListView_Temp_DataBinding">
<LayoutTemplate>
<table id="itemPlaceholderContainer" runat="server">
<tr id="tr_Header">
<th></th>
<th>Name
</th>
<th></th>
</tr>
<tr id="itemPlaceholder">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="tr_Item" runat="server">
<td>
<asp:LinkButton ID="LinkButton_Edit" runat="server" CommandName="Edit">Edit</asp:LinkButton>
</td>
<td>
<asp:Label ID="Label_Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</td>
<td></td>
</tr>
</ItemTemplate>
<InsertItemTemplate>
<tr>
<td>
<asp:LinkButton ID="LinkButton_Insert" runat="server" CommandName="Insert" ValidationGroup="TempInsert">Add</asp:LinkButton>
</td>
<td>
<asp:DropDownList ID="DropDownList_Names" runat="server" DataSourceID="ObjectDataSource_Names" DataTextField="Names"
DataValueField="NameId" OnDataBinding="DropDownList_Names_DataBinding">
</asp:DropDownList>
</td>
<td></td>
</tr>
</InsertItemTemplate>
<EditItemTemplate>
<tr>
<td>
<asp:LinkButton ID="LinkButton_Update" runat="server" CommandName="Update">Update</asp:LinkButton>
<asp:LinkButton ID="LinkButton_Cancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
</td>
<td>
<asp:Label ID="Label_Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</td>
<td>
<asp:LinkButton ID="LinkButton_Delete" runat="server" CommandName="Delete">Delete</asp:LinkButton>
</td>
</tr>
</EditItemTemplate>
<EmptyDataTemplate>
<table id="Table1" runat="server">
<tr>
<td>No Names are specified.
</td>
</tr>
</table>
</EmptyDataTemplate>
.Net 3.5 コードでは、ListView Databinding メソッドが呼び出されてから、DropDownList Databinding メソッドが呼び出されます。誰かがこれを見たことがあるか、解決策があるか、この時点で提案があるかどうか疑問に思っています。
ここに私たちがテストしたもののいくつかがあります。
1) DropDownList の ObjectDataSource を削除します。(DropDownList はまだデータバインドされています) 2) 問題のあるドロップダウンリストからできるだけ多くのプロパティ/メソッド/属性を取り除き、まだデータバインドされています。3)ドロップダウンリストのデータバインディングを完全に停止し、シェルDDLを追加しただけで、データバインディングイベント/メソッドを引き続き実行します。4) 他のコントロール タイプ (ラジオ ボタン、グリッド ビュー) を追加して、それが DDL に固有のものであるかどうかを確認します。それらもデータバインドされます。
どんな助けや洞察もいただければ幸いです。
注: ListView の ViewState をオフにすると、このデータバインディングが発生しないことがわかりました。これは解決策につながる可能性がありますが、この変更および/または変更が行われた理由に関するドキュメントを理解し、参照したいと思います。