- PR -

2回目以降のshowModalDialogでポストバックが起きない

投稿者投稿内容
あらご
会議室デビュー日: 2007/11/09
投稿数: 5
投稿日時: 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/05/23
投稿数: 52
投稿日時: 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"];
}




kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2007-11-12 18:31
現象は「子画面が開かない」わけではなく、「子画面が開くが、Page_Loadイベントが発生しない」と理解してよろしいでしょうか。

上記であると仮定すると、まず浮かんでくるのは「キャッシュが利いている」という事象です。
ご提示のコード、「〜B.aspx?PARAM=" & para & "〜」のparaの内容が必ずしも変わらないのであれば、その可能性が高いと感じます。
まずは、子画面で開かれる方のB.aspxをキャッシュさせないようにしてみてはいかがでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-12 19:00
引用:

kiyokuraさんの書き込み (2007-11-12 18:31) より:
現象は「子画面が開かない」わけではなく、「子画面が開くが、Page_Loadイベントが発生しない」と理解してよろしいでしょうか。

上記であると仮定すると、まず浮かんでくるのは「キャッシュが利いている」という事象です。
ご提示のコード、「〜B.aspx?PARAM=" & para & "〜」のparaの内容が必ずしも変わらないのであれば、その可能性が高いと感じます。
まずは、子画面で開かれる方のB.aspxをキャッシュさせないようにしてみてはいかがでしょうか。


そういえば、ASP.NETが、キャシュ機能を持っていたような?
えー、アプリケーションの実行結果をキャシュする機能です。
web.config とか、さわってないですかね?
あらご
会議室デビュー日: 2007/11/09
投稿数: 5
投稿日時: 2007-11-12 19:23
ボルビ様
kiyokura様
Jitta様

ご回答ありがとうございます。
まず、現象としてはkiyokura様の言われたとおり、
「子画面が開かない」わけではなく、「子画面が開くが、
Page_Loadイベントが発生しない」ということです。

また、スクリプトに記載した「para」の変数は、ログインメニューで選択した
値を保持していますので、選択内容が変われば、渡すパラメータも
変わる仕組みで作成しています。

Web.configをさわっていないか?という点ですが、
特別な変更は加えていないつもりなのですが、
デバッグコンパイルにしたり、オラクル接続文字列を記載したぐらいです。。。

ご指摘された、アプリケーションをキャッシュする機能は
どのようにしてあげれば良いのでしょうか。
知識乏しく申し訳ありませんが、アドバイス頂けないでしょうか。
お願い致します。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-11-13 09:41
他の方が仰っているキャッシュの件とは異なりますが、

C:¥Documents and Settings¥(ユーザ名)¥VSWebCache¥(マシン名)(プロジェクトフォルダ)

の配下を一度削除してみてはどうでしょう。(¥は大文字にしています)
あらご
会議室デビュー日: 2007/11/09
投稿数: 5
投稿日時: 2007-11-13 11:04
まるく様
ご回答ありがとうございます。

教えて頂いた内容で実験してみましたところ、
プログラムソースから実行した場合、
フォルダ配下をまるごと削除するとサーバエラーになってしまいましたので
プロジェクト名.vbproj.cacheのファイルを削除してみましたが、
現象は変わりませんでした。すみません。
仮にこの方法でうまくいくようであったら、他の端末で処理する場合も
毎回キャッシュファイルの削除をすることになるのでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-13 11:41
引用:
また、スクリプトに記載した「para」の変数は、ログインメニューで選択した
値を保持していますので、選択内容が変われば、渡すパラメータも
変わる仕組みで作成しています。

あらごさんのおっしゃる「1回目」と「再度」の間では変わるのですか?
変わらないのであればブラウザのキャッシュの可能性が高いです。

開かれる方のPage_Loadで、例えば
Response.Cache.SetExpires(DateTime.Now.AddDays(-1))
とした場合、状況は変わりますでしょうか。

スキルアップ/キャリアアップ(JOB@IT)