3

現在の問題があります。前にコンテキストを説明しましょう:

フォームを含むモーダル ポップアップ エクステンダーがあります。「保存して新規追加」機能があり、ユーザーがこのボタンをクリックすると、ポストバック中にフォームのデータがデータベースに保存され、ページがリロードされます。

このモーダル ポップアップを page_load に再度表示して、ユーザーがこのモーダル ポップアップを表示するボタンを再度クリックせずに新しいデータを入力できるようにします。

私は最初にこの方法でそれを呼び出そうとしました:

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "ShowModalPopup(""" & Me.formModalButton.ID & """);", True)

しかし、問題は、関数が呼び出されたときにモーダルポップアップがページにまだ存在していなかったことです。そのため、コードは

var modal = $find('myModal');

それで、私はその別の方法を見つけました、そしてそれはほぼ完全に機能しています。

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowModalPopup(""" & Me.formModalButton.ID & """)};", True)

モーダルはページの読み込み時に表示されますが、問題は、ページ上の他のボタンをクリックすると、モーダル ポップアップも再び表示されることです。

例: データを削除するための別のモーダル ポップアップがあります。ボタンをクリックすると、両方のモーダルが表示されますが、これはクールではありません。

それを修正する方法、またはそれを行うためのより良い方法について手がかりを持っている人はいますか?

PS javascript関数がページに存在するため、モーダルポップアップサーバー側を呼び出していないため、RegisterStartupScriptでこの関数のコピーを作成したくありません。

お時間いただきありがとうございます。

4

2 に答える 2

2

以下のコードスニペットを使用してください

//Declares gloabal variable
ClientScript.RegisterStartupScript(Page.GetType(),"vardeclaration","var reloadModal;",true);

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(

function() 
{
   reloadModal = function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """);};
   Sys.Application.add_init(reloadModal);
}
);", True)

これにより、使用できるようになります

function cancelClick()
{
   Sys.application.remove_init(reloadModal);
}
于 2009-02-12T16:23:10.410 に答える
2

最後に、現在の問題の回避策を見つけました。

私はまだ ClientScript.Resgister[...] を使用していますが、今回はキャンセル ボタンの OnClientClick Javascript 関数も変更します。

そのため、ユーザーが「保存して新規追加」機能を選択すると、ページがリロードされ、[キャンセル] をクリックするとモーダルが再び表示され、ページをリロードして奇妙な動作を解決するためだけにサーバーにポストバックします。

また、コード内の更新パネルが異なるために問題が発生する可能性があると思いますが、Modal Popup Extender を機能させるにはそれらが必要です。

とにかく、Opera と Safari でさえ機能していないことがわかりましたが、すべて (Ajax コントロール ツールキット - モーダル ポップアップ エクステンダー) で機能しています。

ここの会社が他のことを気にせず、公式に IE のみをサポートしている可能性があります。私の場合、少なくとも FF と Chrome でも動作するようにしたいと考えています。

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """)});", True)
                btnCancel.OnClientClick = "resetDefaultValue();__doPostBack('" & btnCancel.ID & "','onclick')"

コードがあるので、FFにも別のエラーが表示されますが、

Sys.WebForms.PageRequestManagerServerErrorException: サーバーで要求を処理中に不明なエラーが発生しました。サーバーから返されたステータス コード: 0

そして、私はこの回避策を見つけました。これは最善ではありませんが、これで十分な時間を失いました...

ClientScript.RegisterStartupScript(Page.GetType(), "WorkAroundFF", "Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest); function endRequest(sender, args) { /* Check to see if there's an error on this request.*/ if (args.get_error() != undefined) { $get('Error').style.visibility = ""visible""; /* Let the framework know that the error is handled, so it doesn't throw the JavaScript*/ alert. args.set_errorHandled(true); } }", True)

Ramesh の助けを借りて thx、それが私の更新パネルでなければ、あなたのソリューションがうまくいくと確信しています。

それが他の誰かを助けることを願っています。

于 2009-02-13T15:32:10.133 に答える