ASP.Net UpdatePanel ImageButton により、「this._postbackSettings.async は null またはオブジェクトではありません」が発生します。
-
09-06-2019 - |
質問
このエラーは、dragPanelExtender 内の PopupControlExtender 内の更新パネルで発生します。
他にも多くの人がこの問題を抱えており、さまざまな修正を行っているようですが、どれも私には効果がありませんでした。
なぜこれが起こっているのかについての論理的な説明と、将来このような問題を回避する確実な方法をぜひ聞きたいです。
他の人が主張しているように、トリガーがImageButtonではなくLinkButtonである場合にはこのエラーは発生しないことがわかりましたが、誰かが説明を持っているかどうかまだ疑問に思っています。
解決
私の推測では、UpdatePanel がカスタムの「async」プロパティをポストバック リクエストに適切に書き出すことができないのではないかと考えられます。これはおそらく、それをラップしているコントロールの 1 つからブロックされていることが原因です (私の直感では、それは PopupControlExtender です。これは、表示/非表示の目的で内部のイベントを管理することを目的としているため、updatepanels で奇妙な動作をする傾向があります)。
updatepanel を削除して、特定のビジネス ニーズに合わせて独自のソリューションを展開するか、独自のポップアップ スクリプトを実装することをお勧めします (おそらく、少し書きやすくなります)。
ちなみに、背景として、「this._postbackSettings.async」は、これが非同期呼び出しであるかどうかを判断しようとする AJAX.NET フレームワークです。ポストバックが送信される前にこれをプログラムで設定することでこの問題を解決できる場合があります (ポストバック イベントをキャッチし、ポストバック リクエストにフィールドが存在しない場合はフィールドを追加します)。
ちょっと考えてみましょう...これに対する「プラグ アンド プレイ」の答えはないと思います。
他のヒント
私も同じ問題を抱えていましたが、最終的に満足のいく解決策を見つけることができませんでした。 http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html それはまさに私が望むことを行います。
将来的にデッドリンクが発生する可能性がある問題を回避するためのコードを次に示します。
var script = @"
if (Sys &&
Sys.WebForms && Sys.WebForms.PageRequestManager &&
Sys.WebForms.PageRequestManager.getInstance)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm &&
!prm._postBackSettings)
{
prm._postBackSettings = prm._createPostBackSettings(false, null, null);
}";
ScriptManager.RegisterOnSubmitStatement(
Page,
Page.GetType(),
"FixPopupFormSubmit",
script);
_postBackSettings が設定されていない状態で送信した場合、_postBackSettings が作成され、_postBackSettings.async が使用可能になるため、null 参照例外が消えます。
お役に立てれば、
G.
ScriptManager コントロールで「EnablePartialRendering」を false に設定するとエラーは防止されますが、これは最適な解決策ではありません。アプリケーションによっては、部分レンダリングの利点が失われると大きな問題になる可能性があります。
記録のために言っておきますが、私はエラーを見た他の人々と全く同じことをしていたわけではありません。PopupControlExtender があり、その中にチェックボックスリストがあります。プログラムですべてを選択/選択解除するための JavaScript メソッドを使用して「すべて選択」リンクを追加しました。画像ボタンは使っていません。JavaScriptを追加する前はエラーが表示されませんでしたが、削除した後でもエラーが残ります。私が見逃しているもう一つの変化があるはずです。
これが誰かの役に立つことを願っています...
--マット