|
■No47190 (norineko さん) に返信
FormView の WebForm から Calendar の WebForm を呼び出して、日付を選択して
Calendar の WebForm を閉じる。日付選択のポップアップですか。
> x.Append("opener.document.forms[0].FormView[1].yobi1TextBox.value='")
書き込めない原因はおそらくこの部分です。
opener.document.forms[0] に FormView[1] オブジェクトが無いのではないでしょうか。
FormView[1] ではなくて FormView 内の TextBox の id 属性を指定すると良いかと思います。
この場合の id 属性はプログラム上のコントロール ID (TextBox.ID) ではなく ASP.NET の生成す
る ID (TextBox.ClientID) です。
FormView 内のコントロールの ClientID は実行時に動的に書き換えられるので ID と ClientID
は異なります。
FormView を配置している WebForm を実行して HTML のソースを眺めてみてください。
おそらく FormView1_yobi1TextBox こんな感じの id 属性になっているはずです。
これを指定すると良いです。
x.Append("opener.document.forms[0].FormView1_yobi1TextBox.value='")
以下は余裕がありましたら、参考までに。
汎用性の観点からは上記のようなやり方はしないほうが善いです。
動的に生成されるものは動的に取得して、Calendar の WebForm は呼び出し元のコントロールに依存し
ないようにした方が善いです。
まずは
[FormView を配置している .aspx.vb]
FormView 内の TextBox の ClientID を返す Function を用意します。
Function GetTextBoxClientID() As String
Return Directcast(FormView1.FindControl("yobi1TextBox"), Control).ClientID
End Function
つぎに
[FormView を配置している .aspx]
FormView 内の TextBox に値をセットする function を用意します。
最初に作成した Function を呼び出すことで動的に生成された ClientID を取得して
ClientID をもとに document.getElementById で TextBox を取得して値をセットします。
<script type="text/javascript">
function setText(value) {
document.getElementById('<%= GetTextBoxClientID() %>').value = value;
}
</script>
最後に
[Calendar を配置している .aspx.vb]
上で用意した setText を呼び出すようにします。
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles Calendar1.SelectionChanged
Dim buffer As New StringBuilder()
buffer.AppendLine(String.Format( _
"opener.setText('{0}');", _
Calendar1.SelectedDate.ToString("yyyy/MM/dd")))
buffer.AppendLine("self.close()")
Literal1.Text = buffer.ToString()
End Sub
|