body runat =“server”导致编译错误

时间:2009-04-07 13:20:18

标签: asp.net

在母版页中我有以下标记

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

我设置了runat="server",因为我需要能够在代码隐藏中访问body元素。

我现在想要向body onload事件添加一个JavaScript函数调用,如下所示:

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

但是,这是一个编译错误,消息为“无法解析符号someJavaScriptFunction();”。如果我运行应用程序,我会收到错误告诉我

Compiler Error Message: CS1026: ) expected

这里发生了什么? onload是一个客户端事件,为什么ASP.NET编译器关心这个?

2 个答案:

答案 0 :(得分:15)

您需要在后面的代码中添加它;

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

runat="server"添加到标记使其成为服务器标记,即使它不是明确前缀的标记之一(例如<asp:Panel />)。在服务器标签上,任何onXXXX事件处理程序都处理服务器端事件,而不是客户端事件(除非“客户端”被明确调出,例如使用OnClientClick for buttons)。

答案 1 :(得分:3)

也可以选择设置:

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

这种情况正在发生,因为ASP正试图将body标签内的脚本解释为页面代码的一部分。好像它是C#/ VB ......