- - PR -
2回目以降のshowModalDialogでポストバックが起きない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-09 10:54
初投稿します。どうぞよろしくお願いします。
現在、ASP.NET(VS.NET2003、.NET Framework1.1)で親画面からshowModalDialogで 子画面を表示させていますが、その表示内容が思ったようにいかず悩んでいます。 <行っている処理> 親画面 A.aspx.vbのbtnAのボタンクリックイベントに記載。 ↓ Dim strScript As String strScript = "<SCRIPT LANGUAGE='javascript'>" strScript &= "var winreturnValue;" strScript &= "winreturnValue=window.showModalDialog('B.aspx?PARAM=" & para & "','window');" strScript &= "document.all.hidTEST.value=winreturnValue;" strScript &= "Form1.submit();</SCRIPT>" RegisterStartupScript("startup", strScript) ----------- 子画面 B.aspx.vbのページロードで、親画面から渡されたパラメータを 使って子画面にデータを表示させる。 ----------- 以上のことをやっている中、 画面実行して、1回目に子画面を開く親画面のボタンを押したときは、 子画面のページロードにイベントがいくのですが、 子画面を閉じたあとに、再度親画面の子画面を開くボタンを押した際は 子画面のページロードにイベントが発生しません。 子画面の表示内容は変わってきますので、親画面の子画面表示ボタンを 押されたら毎回子画面のページロードへイベントを走らせたいのですが、 どうすればよいのでしょうか?? いろいろと調べてみましたが、 スキル不足のため、解決策がわかりませんでした。 どうぞ、なにかアドバイスを頂ければと思います。お願いします。 | ||||
|
投稿日時: 2007-11-12 18:15
同じ環境は用意できなかったのでVS.NET2005、.NET Framework2.0、C#で
試してみたんですが、子画面のページロードへイベントは毎回走りました。 親画面のテキストボックスに入力した値を子画面で表示しています。 下記が試したソースです。 親画面 A.aspx <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="子画面表示" OnClick="Button1_Click" /> </div> </form> </body> 親画面 A.aspx.cs public partial class IT_Test1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); sb.Append("<script type='text/javascript'>\\r\\n"); sb.Append(" var winreturnValue;\\r\\n"); sb.Append(" winreturnValue = window.showModalDialog('B.aspx?PARAM=" + TextBox1.Text + "','window');\\r\\n"); sb.Append("</script>\\r\\n"); Page.ClientScript.RegisterStartupScript(this.GetType(), "test", sb.ToString()); } } 子画面 B.aspx <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </div> </form> </body> 子画面 B.aspx.cs protected void Page_Load(object sender, EventArgs e) { Label1.Text = Request["PARAM"]; } | ||||
|
投稿日時: 2007-11-12 18:31
現象は「子画面が開かない」わけではなく、「子画面が開くが、Page_Loadイベントが発生しない」と理解してよろしいでしょうか。
上記であると仮定すると、まず浮かんでくるのは「キャッシュが利いている」という事象です。 ご提示のコード、「〜B.aspx?PARAM=" & para & "〜」のparaの内容が必ずしも変わらないのであれば、その可能性が高いと感じます。 まずは、子画面で開かれる方のB.aspxをキャッシュさせないようにしてみてはいかがでしょうか。 | ||||
|
投稿日時: 2007-11-12 19:00
そういえば、ASP.NETが、キャシュ機能を持っていたような? えー、アプリケーションの実行結果をキャシュする機能です。 web.config とか、さわってないですかね? | ||||
|
投稿日時: 2007-11-12 19:23
ボルビ様
kiyokura様 Jitta様 ご回答ありがとうございます。 まず、現象としてはkiyokura様の言われたとおり、 「子画面が開かない」わけではなく、「子画面が開くが、 Page_Loadイベントが発生しない」ということです。 また、スクリプトに記載した「para」の変数は、ログインメニューで選択した 値を保持していますので、選択内容が変われば、渡すパラメータも 変わる仕組みで作成しています。 Web.configをさわっていないか?という点ですが、 特別な変更は加えていないつもりなのですが、 デバッグコンパイルにしたり、オラクル接続文字列を記載したぐらいです。。。 ご指摘された、アプリケーションをキャッシュする機能は どのようにしてあげれば良いのでしょうか。 知識乏しく申し訳ありませんが、アドバイス頂けないでしょうか。 お願い致します。 | ||||
|
投稿日時: 2007-11-13 09:41
他の方が仰っているキャッシュの件とは異なりますが、
C:¥Documents and Settings¥(ユーザ名)¥VSWebCache¥(マシン名)¥(プロジェクトフォルダ) の配下を一度削除してみてはどうでしょう。(¥は大文字にしています) | ||||
|
投稿日時: 2007-11-13 11:04
まるく様
ご回答ありがとうございます。 教えて頂いた内容で実験してみましたところ、 プログラムソースから実行した場合、 フォルダ配下をまるごと削除するとサーバエラーになってしまいましたので プロジェクト名.vbproj.cacheのファイルを削除してみましたが、 現象は変わりませんでした。すみません。 仮にこの方法でうまくいくようであったら、他の端末で処理する場合も 毎回キャッシュファイルの削除をすることになるのでしょうか。 | ||||
|
投稿日時: 2007-11-13 11:41
変わらないのであればブラウザのキャッシュの可能性が高いです。 開かれる方のPage_Loadで、例えば Response.Cache.SetExpires(DateTime.Now.AddDays(-1)) とした場合、状況は変わりますでしょうか。 |