在母版页中我有以下标记
<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编译器关心这个?
答案 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 ......