C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: マスターページを使った場合のJavaScriptからの参照


(過去ログ 50 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■27369 / inTopicNo.1)  マスターページを使った場合のJavaScriptからの参照
  
□投稿者/ ロック (133回)-(2008/11/04(Tue) 21:06:13)

分類:[ASP.NET (C#)] 

お世話になります。

カレンダーから日付を選択してテキストボックスに表示するという
処理を作っているのですが、マスターページを使わない単体のページなら
思い通りの動作をするのにマスターページを使ったページだと思い通りに
動作しなくて困っています。(ContentPlaceHolder内のページ)

●カレンダー選択aspxの作り
Calenderコントロール(ID:cal)を貼り付けて、その下に
<script type="text/javascript" language="javascript">
<!--
    <asp:Literal ID="ltrScript" runat="server"></asp:Literal>
//-->
</script>
と記述しておきます。

●呼び出し元のボタン
OnClientClick='window.open("Calendar.aspx", "", "width=230, height=200,resizable=no, statusbar=no, toolbar=no");return false;'
と記述して、ボタン押下で上記のページを開きます。
このボタンコントロールは、マスターページを持つコンテンツページ内に配置されています。

●カレンダー選択aspxの処理
SelectionChanged()を追加して、以下のような処理を入れます。

System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.Append("opener.document.forms[0].TextBox1.value='");
builder.Append(cal.SelectedDate.ToString("yyyy/MM/dd"));
builder.Append("';self.close();");
ltrScript.Text = builder.ToString();

っとすると、呼び出し元フォームのTextBox1に選択した日付が入るのですが
マスターページを使った場合は、日付が入らずカレンダーも閉じない状態になります。
閉じられないカレンダーのソースを見ると目的のJavaScriptは吐き出されています。

JavaScriptも、昨日今日はじめたばかりの人間なので、調べながらやっているのですが、
opener.document.forms[0].TextBox1.value=
                ~~~~~~~~~~~~~~~~~~ この部分が問題のような気がしたので

opener.document.form1.TextBox1.value= とか(VS2005上でのマスターページのform IDを指定)
opener.document.form1.ContentPlaceHolder1.TextBox1.value= とか
opener.document.forms['aspnetForm'].TextBox1.value= とか(ブラウザ上で見た時のform ID)

手探りで色々変えてやってみたのですがダメでした。
self.close();だけにすると、カレンダー選択のページは閉じます。
マスターページを使用している場合、JavaScriptからのコントロールの参照方法は
やり方が違うのでしょうか?
よろしくお願いします。

引用返信 編集キー/
■27374 / inTopicNo.2)  Re[1]: マスターページを使った場合のJavaScriptからの参照
□投稿者/ やじゅ (752回)-(2008/11/04(Tue) 23:23:54)
やじゅ さんの Web サイト
No27369 (ロック さん) に返信

私もASPやってないので、よく分かってません(^^;
「ContentPlaceHolder1」をキーワードで検索してみた感じが下記の書き方でした。
そんなに外れてはいないと思うんだけどね。

Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1")
Label1=CType(Page.PreviousPage.FindControl("ctl00$ContentPlaceHolder1$TextBox1"), TextBox).Text

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34056&forum=7

引用返信 編集キー/
■27382 / inTopicNo.3)  Re[2]: マスターページを使った場合のJavaScriptからの参照
□投稿者/ ぱると (5回)-(2008/11/05(Wed) 09:36:08)
opener.document.getElementById('TextBox1')
ではどうでしょう?
引用返信 編集キー/
■27384 / inTopicNo.4)  Re[3]: マスターページを使った場合のJavaScriptからの参照
□投稿者/ ロック (134回)-(2008/11/05(Wed) 09:54:04)
やじゅさん、ぱるとさん、回答ありがとうございます。

opener.document.forms[0].ctl00_ContentPlaceHolder1_TextBox1.value='
としたら、思った通りの動作になりました。
formではなくコントロールのnameの方が変わるんですね
この発想には至りませんでした・・・まだまだですね
#あと検索スキルも、まだまだですね、あのURLには辿り着けませんでした

助かりました、ありがとうございます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -