- - PR -
子ウィンドゥが閉じないのです。
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-18 22:00
こんばんは。
ASP.NET2.0(IE6) 子ウィンドゥのドロップダウンリストから値を選択し、 OKボタンを押すと、その子ウィンドゥを閉じ、 親ウィンドゥのラベルに、その値を表示させようとしているのですが、 値も入らず、子ウィンドゥも閉じません。 子ウィンドゥのOKボタンを押した時のコードは、 Dim strID As String = ddlName.SelectedValue.ToString Dim strScript As New StringBuilder With strScript .Append("<script language='javascript'>" & vbCrLf) .Append(vbTab & "window.opener.test.lblID.value='" & strID & "';" & vbCrLf) .Append(vbTab & "window.close();" & vbCrLf) .Append("</" & "script>") End With ClientScript.RegisterClientScriptBlock(Me.GetType, "closewin", strScript.ToString) です。 子ウィンドゥを開く時のコードは、 Dim objScript As New StringBuilder Dim strFeatures As String = "height=150,width=430,left=50,top=50," & _ "location=no,menubar=no,resizable=yes,scrollbars=no," & _ "status=no,titlebar=yes,toolbar=no" With objScript .Append("<script language='javascript'>" & vbCrLf) .Append(vbTab & "window.open('child.aspx',null,'" & strFeatures & "');" & vbCrLf) .Append("</" & "script>") End With ClientScript.RegisterClientScriptBlock(Me.GetType, "openwin", objScript.ToString) で、子ウィンドゥを開く方は、問題なく動作します。 どこがいけないのでしょうか。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-05-18 23:16
これ、開くときってほんとに動いてます?
もしかしてPostBackしてページが切り替わったあと動いてるんでしょうか。 だとすると、ブラウザのポップアップブロックが効いてたりすると警告が表示されませんか? こういった場合、JavaScriptは関数化しておいて、ボタンクリック時に その関数を呼ぶような形にするのが普通だと思うのですが、 これだと単にJavaScriptをページ内に追加してるだけですよね。。。 まぁ、子ウィンドウのほうもボタンを押したときにPostBackさせてやれば 一応動くだけは動くかもしれないけど。 | ||||||||||||
|
投稿日時: 2006-05-19 00:54
まずは静的なHTMLで試してみませんか?
とりあえず次のHTMLは動くみたい 親
子
| ||||||||||||
|
投稿日時: 2006-05-19 01:36
Labelは変更できないのではないでしょうか? TextBox等であれば問題なく動くと思います。 たぶん、Labelの文字列は要素ではないので変更できないのでしょう。 あと、本題とは関係ないですがスクリプトはファイルを別にした方がメンテナンスし易いですよ。 たとえば、sample.jsというファイルを作成し、 sample.js
各aspx.vb
のように記述すれば、期待する動きになると思います。 | ||||||||||||
|
投稿日時: 2006-05-19 01:43
あっラベルなのか… としたら innerHTML でいけるかな
| ||||||||||||
|
投稿日時: 2006-05-19 14:34
こんにちは。
ありがとうござます。 ラベルをテキストボックス(txtId)にしたら、値の取得はできるようになったのですが、 その後で、別の問題が出てきてしまいました。 ASP.NET2.0以前の書籍を参考にしているのですが、 ASP.NET2.0ではエラーになってしまうようで。 親画面に値が入った後、値が入ったテキストボックスのTextChangeイベントを使って、 その値を元に、DBからレコードを取得、表示しようとしています。 <asp:Button ID="btnRefresh" runat="server" Text="hidden" Visible="false" /> でhiddenボタンを貼り付けておき、 PageのLoadイベントで、 txtId.Attributes.Add("OnPropertyChange", ClientScript.GetPostBackEventReference(btnRefresh, "")) のように、txtIdの値が変更されたら、 btnRefreshボタンのOnClickイベントが実行されるようにしています。 そのOnClickイベントで、取得した値をもとにしたレコードの表示を行うようにしています。 ところが、実行すると、txtIdに値が入ったあと、以下のようなエラーメッセージが表示されてしまいます。 「 無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。データが有効であり、予期されている場合、検証のためのポストバックまたはコールバック データを登録するために ClientScriptManager.RegisterForEventValidation メソッドを使用してください。 」 どうしたらよいのやら。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-05-19 14:51
つづきです。
<%@ Page EnableEventValidation="true" %> を <%@ Page EnableEventValidation="false" %> にすると、エラーメッセージは表示されず、 実行されるようになるのですが、 やっぱり、よくないですよね。 | ||||||||||||
|
投稿日時: 2006-05-19 23:46
たぶん、現在はbtnRefresh_Clickに処理を記述していると思いますが、
それをtxtID_TextChangedへ移動して、次に以下の太字の部分をtxtIDに変更してください。
これで正しく実行されると思います。(btnRefreshは不要です) あと、txtID_TextChangedの最後に次の一文を追加すると、子ウィンドウから戻った場合のみに更新されるようになります。
|