2009-04-07 12 views
6

は、私はコードビハインドでbody要素にアクセスできるようにする必要がありますので、私はrunat="server"設定したボディにrunat =「サーバー」原因コンパイルエラー

<body id="body" runat="server"> 

次のマークアップを持っています。

私は今、このように、body onloadイベントにJavaScript関数の呼び出しを追加したいと思います。しかし

<body id="body" runat="server" onload="someJavaScriptFunction();"> 

が、これはシンボルsomeJavaScriptFunctionを解決できません」のメッセージと共に、私のコンパイルエラーを与えています() ; "アプリケーションを実行するとエラーが表示されます

Compiler Error Message: CS1026:) expected

ここでは何が起こっていますか? onloadはクライアント側のイベントなので、ASP.NETコンパイラはこれを気にするのはなぜですか?

答えて

15

これをコードの後ろに追加する必要があります。タグにrunat="server"追加

protected void Page_Load(object sender, EventArgs e) 
{ 
    body.Attributes.Add("onload", "someJavaScriptFunction();"); 
} 

は、それが明示的に接頭辞もの(例えば<asp:Panel />)のいずれでもない場合であっても、そのサーバタグなります。サーバータグでは、onXXXXイベントハンドラは、クライアント側のイベントではなく、サーバー側のイベントを処理します(ボタンのOnClientClickなど、明示的に「クライアント」が呼び出された場合を除く)。 ASPは、ページ内のコードの一部として、bodyタグ内のスクリプトを解釈しようとしているので、これが起こっている

<head> 
    <script language="text/javascript"> 
    window.onload = function() { someJavaScriptFunction(); } 
    </script> 
</head> 

+0

これはどういうことか分かりますが、なぜrunat = "server"を追加するとこのアプローチを使用する必要があるのですか? –

+0

"サーバーで実行する"ように指示したため、Body_SomeJavaScriptFunctionメソッドをコードの背後で探しているためだと思いますか? –

+0

正解...私はあなたの答えを追加しましたイアン、あなたは気にしないといいですね:) –

3

これは、設定するオプションもあります。 C#/ VBのように...

+0

これは "ここで何が起こっているのですか?"という質問には答えません。 「なぜASP.NETコンパイラはこれについて気にしますか?」 – Cerebrus

+0

これは私のシナリオで最後に行ったアプローチです。 –

関連する問題