私は自分のコードでこの例外を受け取っていて、誰かが私を助けてくれるかどうか疑問に思いました。
ObjectDataSourceにバインドされたリピーターコントロールがあり、リピーターのitemtemplateにはユーザーコントロール(ASCX)が含まれています。このユーザーコントロールには、他のいくつかのコントロール、主にObjectDataSourceに関連付けられているGridViewが含まれています。
この設定でコントロールを最初に使用すると、すべてがうまく機能します。データは正しく表示されます。ただし、フィルターオプション(リピーターの外側のドロップダウン)を変更してからリピーターを再バインドすると、例外が発生します。
ObjectDataSourceコントロール'expDataSource'には名前付けコンテナーがありません。DataBindを呼び出す前に、コントロールがページに追加されていることを確認してください。 "at System.Web.UI.WebControls.DataBoundControlHelper.FindControl(Control control、String controlID)... ...atSystem.Web.UI.WebControls.ObjectDataSource。 LoadCompleteEventHandler(オブジェクト送信者、EventArgs e)
問題が何であるかはわかりません-データソースをASCXコントロールの外に移動すると役立つ可能性があることをいくつかの場所で読んだことがあります-これは何もしません。objectdatasourceは適切に構造化されているように見え、私が言ったように、それは初めて(のみ)機能します。
LoadComplete()が発生した後にASP.NETがFindControl()を呼び出しているときにこれが発生しているという例外について、スタックトレースで気づきました。コードをステップスルーすると、これが発生する前にすべてのコードの実行が終了したように見えるため、すべて「システム」コードになります。
ASP.NETがLoadCompleteハンドラーでこのデータソースコントロールを見つけられないのはなぜですか?
ありがとう!
その他の注意事項:
このエラーは1回おきに発生します。したがって、最初にデータが正しく読み込まれると、2回目の更新でこのエラーが発生して失敗します。もう一度「ロード」をクリックすると、動作します(3回目)。
失敗したときは、ASCXコントロールで「Page_Load」が2回呼び出されているようです。したがって、パターンは次のとおりです。
- 作業パターン:
- 親ページのPage_Load
- ASCXでのPage_Load
データは正常に読み込まれます
- 失敗パターン:
- 親ページのPage_Load
- ASCXでのPage_Load
- ASCXでのPage_Load
- 例外
これはすべて「Repeater.DataBind()」の呼び出しから発生しますが、すでにバインドされているかどうかによって(明らかに)動作が異なります。
その他の注意事項:
本当に奇妙な行動。ObjectDataSourceの下部からSelectParametersのリストを削除しましたが、突然、ページはObjectDataSourceをNamingContainerがないものとして拒否しません。もちろん、これらのパラメーターがないと、データバインディングは実際には機能しません...コードにそれらを追加できますが、なぜそれが重要なのでしょうか?