ASP.Net、ドラッグアンドドロップ、ポストバック、およびコントロールID
-
10-07-2019 - |
質問
タイトルは問題を要約しようとしますが、より詳細な要約は次のとおりです。当社のWebページは、AJAX更新パネルで設定される長方形のレポートウィジェットとして視覚的にレンダリングされるユーザーコントロールのコレクションです。ユーザーがウィジェットを事前に設定された「ゾーン」にドラッグアンドドロップできるようにします。ページで。
ドラッグアンドドロップ機能は正常に機能します。 WebサービスへのAJAX呼び出しを使用して、永続化のためのユーザーの新しい設定でデータベースを更新します。
「ただし」これらのウィジェットのいずれかからポストバックを行うと発生します。ポストバックはサーバーに送信され、更新をレンダリングします。更新はクライアントに送信されます(updatepanelのため、すべてAJAX経由)。次に、「IDを持つUpdatePanelが見つかりませんでした...」を取得します。文書階層は変更されたが、クライアント上でコントロールIDが更新されていないため、クライアント上のメッセージ。
このに対してRick Strahlのソリューションを試しましたリンクテキスト。これにより、クライアントで静的コントロールIDを作成できます。ただし、これはポストバック機能を破壊します... isPostBackプロパティは設定されていません。サーバーがコントロールIDを既知の階層要素と一致させることができないためです。
Javascriptを使用して、ドラッグアンドドロップ後にクライアント側でコントロールIDをリセットすることを考えています。明らかに、これには.Netの命名アルゴリズムを複製する必要があります。別のupdatepanelを使用して、サーバーに新しいコントロールIDをドロップした後に送信するように依頼することができますか?
明らかに、アイデアが不足しています。
これはおそらく長すぎると思うので、喜んで編集したり、コードサンプルを提供したりして、あなたを助けてください。よろしくお願いします。
解決
興味がありませんが、ポストバックするUpdatePanelのIDを調べましたか? ASP.NETのクライアントページのライフサイクルにフックできます。 AJAXのように、ポストバックを開始するコントロールのIDを検査します
<script type="text/javascript">
function pageLoad(sender, args)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
//fires when an async postback is initialized
function InitializeRequest(sender, args)
{
alert(args._postBackElement.id)
}
//fires when an async postback is complete
function EndRequest(sender, args)
{
alert(sender._postBackSettings.sourceElement.id)
}
}
</script>
他のヒント
WebPartsと呼ばれるドラッグ可能なページ要素にASp.Netの組み込みシステムを使用できます。
システムはポストバックで動作し、Visual Studioで簡単に実装できます
次のようなWebパーツチュートリアルを検索します。
http://www.ondotnet.com /pub/a/dotnet/2005/01/10/liberty.html
これが役立つことを願って