我的一个网页中有runat="server"
的iframe,以及分配给onload事件的javascript函数。
当页面呈现时出现错误
"CS1012: Too many characters in character literal"
当我删除runat =“server”属性时它运行得很好,但我需要iframe来运行=“server”。
如何解决这个问题?
<iframe id='contentFrame' name='contentFrame'
runat="server" width="500"
onload="resizeFrame(document.getElementById('contentFrame'))">
</iframe>
答案 0 :(得分:13)
当你使用 runat =“server”时,'onload'开始被解析为Html服务器控件的C#事件,比如Button.Click。您应该在控件/页面的类中设置 C#事件处理程序方法的名称(NOT JAVASCRIPT)。这段代码可以使用:
<script runat="server">
void contentFrame_onLoadServer(object sender, EventArgs e)
{
if (!IsPostBack)
contentFrame.Attributes.Add("onLoad", "contentFrame_onLoadClient();");
}
</script>
<script type="text/javascript">
function contentFrame_onLoadClient() {
resizeFrame(document.getElementById('<%=contentFrame.ClientID %>'));
}
function resizeFrame(element) {
alert(element); // do your logic here
}
</script>
<iframe
runat="server"
id='contentFrame'
name='contentFrame'
width="500"
onload="contentFrame_onLoadServer"
/>
答案 1 :(得分:1)
你不能只是&#34;只是&#34;添加客户端代码的onload,因为它已被占用&#34;由.NET服务器端onload。你需要通过代码来连接它(我增强了@Philipp的代码):
<script runat="server">
void onIframeLoad(object sender, EventArgs e)
{
if (!IsPostBack)
{
contentFrame.Attributes.Add("onload", "resizeFrame(document.getElementById('contentFrame'));");
}
}
</script>
<iframe id='contentFrame'
name='contentFrame'
runat="server" width="500"
onload="onIframeLoad"/>
答案 2 :(得分:0)
用double替换单引号:
< iframe id="contentFrame" name="contentFrame" runat="server" width="500" onload="resizeFrame(document.getElementById('contentFrame'))">
答案 3 :(得分:0)
您无法在onload方法中编写document.getElementById('contentFrame')
。把它写在你的javascript函数中。
答案 4 :(得分:0)
runat =“server”会更改IFrame的ID。
而不是传递“document.getElementById('contentFrame')”在javascript中传递“this”。
或者你也可以通过
document.getElementById('<%= contentFrame.ClientID%>')