runat =“server”时出现iframe错误

时间:2012-12-13 06:54:15

标签: asp.net

我的一个网页中有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>

5 个答案:

答案 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%>')