0

私のプロジェクトは基本的に、メニューと更新パネルを備えた Web ページです。ユーザーがメニューから選択肢を選択すると、ユーザー コントロールが updatepanel に読み込まれます。更新パネルを使用したくないのですが、別のデータバインドされたコントロールの内容を変更する情報を含むデータバインドされたコントロールが複数あります。とにかく、私のプロジェクトではメッセージボックスを画面に表示する必要がありますが、作業に問題はありません。

string s= "<script>alert('HayGuise');</script>";
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false);

ここで、GUID を静的文字列に置き換えるなど、さまざまな方法を試しました。RegisterStartupScript などを使用しました。私の問題は、updatepanel が更新されて新しいユーザー コントロールが表示された後、呼び出しボタンを最初にクリックしたときにメッセージ ボックスが表示されないことです。しかし、ボタンをもう一度クリックすると、すべてがうまくいきます。updatepanel に読み込まれた最初のフォーム (サイトを開いてメニューから選択) でこれを行うと、すべて正常に動作します。これが発生するのは、updatepanel が新しいフォームで再度更新されたときだけであり、最初のクリック時にのみ発生します。

さらに、コードが実行され、ScriptManager コードに続くすべてのコードが実行されますが、メッセージ ボックスはボタンが再度クリックされるまで表示されません。現時点でこの動作をテストしているため、フォームの各ボタンにポップアップ コードを追加しましたが、動作はそれぞれ同じです。(メッセージボックス用の) 信頼性の高いコードを実装するのに、このわずかな問題が発生するまでに時間がかかるのは残念です。私はそれが何か単純なものになると確信しており、私がよく知らないある種のプロパティを正しく設定する必要があります。くそー、私はこれらの小さな問題をすべて解決して、プロジェクトの残りを進めることができるようになりたい. すっごく近い。助けてくれてありがとう。

編集:さらに、ボタンは、更新パネルに表示されるユーザーコントロールフォームに追加される別のユーザーコントロールにあります。

編集 II: ご意見をお寄せいただきありがとうございます。遅れて申し訳ありませんが、プロジェクトの他の部分に移り、これに戻ってきました。問題は、startupscript メソッドでも clientscriptblck メソッドでもありません。この問題は、ポストバックで値/viewstate/clientid が失われることにあります。

この質問を投稿した時点では、このプロジェクトは単一ページのアプリケーションでした。マルチページ アプリケーションを作成して機能をテストし、この問題に戻ることを誓って、そこから作業を続けました。さて、私は戻ってきましたが、問題は更新パネルにはありません。更新パネルをクリアして(通常のパネルでも試しました)、新しいユーザーコントロールをリロードするため、コードに関係があります。クリアすると、何かがおかしくなり、最初のポストバックでは何も発生しません。この問題の原因となっている最初のポストバックに固有の多くの (いくつかの記事) 情報をまだ見つけていないという奇妙な問題です。答えが見つかったら、答えを更新します。私が見つけた唯一の修正は、メニュー選択コード Server.Transfer(thecurrentpage) に行を追加して、基本的にページを更新することです。これですべての問題が解決しますが、少し味が悪いようです。ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

0

AJAX UpdatePanel を使用している場合は、次のコードが機能するはずです。私の場合、更新パネルを使用していましたが、これ以外は機能しませんでした。

ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true);
于 2015-06-11T05:57:32.387 に答える