4

我的一个网页中有一个 iframe,其中runat="server"一个 javascript 函数分配给了 onload 事件。
当页面呈现时,它会给出一个错误,因为
"CS1012: Too many characters in character literal"
当我删除 runat="server" 属性时它工作得很好,但我需要 iframe 来运行at="server"。
我怎样才能解决这个问题?

<iframe id='contentFrame' name='contentFrame' 
   runat="server" width="500"
   onload="resizeFrame(document.getElementById('contentFrame'))">
 </iframe>
4

5 回答 5

14

当您使用runat="server" - 'onload' 开始被解析为 Html 服务器控件的 C# 事件,例如 Button.Click。您应该在控件/页面的类中设置C# 事件处理程序方法的名称(不是 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"
    />
于 2012-12-13T07:26:32.400 回答
1

您不能“只”为客户端代码添加 onload,因为它被 .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"/>
于 2012-12-13T07:48:42.390 回答
0

您不能document.getElementById('contentFrame')在 onload 方法中写入。把它写在你的 javascript 函数中。

于 2012-12-13T07:12:43.570 回答
0

runat="server" 更改 IFrame 的 ID。

而不是通过“document.getElementById('contentFrame') ”在javascript中传递“this” 。

或者你也可以通过

document.getElementById('<%= contentFrame.ClientID%>')
于 2012-12-13T07:41:23.673 回答
0

用双引号替换单引号:

< iframe id="contentFrame" name="contentFrame" runat="server" width="500" onload="resizeFrame(document.getElementById('contentFrame'))">
于 2012-12-13T06:59:05.397 回答