- PR -

MasterPageを使用したページでjavascriptのオブジェクトがnullになる

1
投稿者投稿内容
matrix
会議室デビュー日: 2008/07/13
投稿数: 15
投稿日時: 2009-02-24 11:57
初めてMasterPageを使用した初心者です。
環境はWinXP VS2005 C# です。
以下の様な簡単なjavascriptでMasterPageなしのフォームでは正しく動作しますがMasterPage付きのフォームだと「document.form1.Text1はNullまたはオブジェクトではありません。」とVSから怒られてしまいます。
賢者のみなさま、宜しくお願いいたします。

【MasterPageありのコーディング】
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="MyFormMasterPage.aspx.cs" Inherits="MyFormMasterPage" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">...........

【MasterPageなしのコーディング】
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyForm.aspx.cs" Inherits="MyForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
</head>
<body>...............

【スクリプト(MasterPageあり/なしとも同じコードです】
<script type="text/javascript" language="JavaScript">
function tokei()
{
dt=new Date();
h=dt.getHours();
m=dt.getMinutes();
s=dt.getSeconds();
document.form1.Text1.value="時刻"+h+":"+m+":"+s;
}
setInterval('tokei()',1000);
</script>

<input id="Text1" type="text" />
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-24 12:15
まず表示されたページのソースの HTML を見て
document の form1 の中に Text1 という name のオブジェクトがあるか確認してみて下さい。

こういうのが無いと「document.form1.Text1」は認識出来ないです。

コード:

<form name="form1>
    <input type="text" name="Text1">
</form>


MasterPage の中ではコントロールの ID の頭に何か付加されたものが
id や name として HTML に出力されたと思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-24 15:03
HTML になったときの form の ID が、MasterPage なしの場合と MasterPage ありの場合で異なることが直接の原因ですね。
# ASP.NET の TextBox ではないので、Text1 の ID は変わらない

HTML になったときの form の ID は、Page クラスの Form.ClientID で取得できますので、
コード:
document.form1.Text1.value



コード:
document.<% = Form.ClientID %>.Text1.value


に直せばよさそうです。
matrix
会議室デビュー日: 2008/07/13
投稿数: 15
投稿日時: 2009-02-24 15:39
Kingさん、rainさんありがとうございます。
変換後htmlのソースコードなど今まで見たことが無かったので気がつきませんでした。
実行時、変換後のhtmlではaspxの「<form id="form1"」が「form name="aspnetForm" 」に変換されます。
初心者ならでの落とし穴にずっぽりはまりました。
MasterPageのこの仕様はMSDNには記述されているのかな?探してみます。
いつも思うのですが新しい機能を使うとき、出来ることはわかっているのにクラスなり
メソッドなり等、逆引きで苦労します。
そういった面でここの会議室は本当にありがたいです。
あらためましてお礼申し上げます。
ありがとうございました。

PS
もう一つ課題がありまして....
真剣に調べてわからなかったら、またご質問させていただきます。
1

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