<div>
        <input id="Button1" type="button" value="button" onclick="a()" />
    </div>
    <input id="Button2" runat="server" type="button" value="button" onclick="ShowIframe('危险源的添加','WebForm1.aspx',500,300)" /><br />
    <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="ShowIframe('危险源的添加','WebForm1.aspx',500,300)" onclick="Button3_Click" />
      js代码如下:<script language="javascript" type="text/javascript">
        function a() {
            document.getElementById("Button1").onclick("ShowIframe('危险源的添加','WebForm1.aspx',500,300)");
            document.getElementById("Button3").click();
            return; 
        }
    </script>
  ShowIframe是一个js脚本,碰巧这个脚本不支持服务器控件的调用,只能用客户端的控件! 刚好我的需求要后台执行一些代码! 我给客户端控件加上runt=“server”,给它定义事件,但是不执行,无奈只能用两个按钮,点击客户端控件的时候,调用哪个服务器控件,本身客户端控件还会执行一个js代码,上面是做法,但是提示,堆栈溢出。 查原因是js不支持重载。
有上面办法,让它执行这个代码!

解决方案 »

  1.   

    看不懂。如果你靠服务器去刷新html,那么你“同时”执行js就是白费,而且会搞乱浏览器端你需要的状态。如果你考服务器去更新后台持久化数据,以ajax方式访问数据服务功能啊,跟当前页面没有直接的关系。
      

  2.   

    或者这样说吧。假设你的这两个操作都是针对界面状态进行顺序设置的,那么它们必须形成一个顺序执行序列。也就是说一个执行完了才执行另外一个。例如你可以先回发到服务器,然后服务器使用ManagerScript.RegisterStartupScript方法注册js脚本再在浏览器端调用ShowIframe;或者反过来,(如果它真的考虑到的话)在ShowIframe的回调函数中才去回发服务器(这通常是通过之前在服务器端执行Page.ClientScript.RegisterPostbackEventReferrence方法注册一个回发方法到客户端)。
      

  3.   

    ShowIframe是一个js脚本,碰巧这个脚本不支持服务器控件的调用,只能用客户端的控件!
    这个你的理解就是错误的。
    button的onclientclick就可以先执行客户端的JS函数,当然可以根据返回值是不是为true,来决定是不是要执行服务器端事件。比如我们常用的删除时,提示是否删除的提示信息。
      

  4.   


      我当然知道onclientclick这个事件。 但是把showiframe放到这个事件下面,能显示窗体,但是不到一秒就自动关闭。这个是为什么呢?
      

  5.   

      问题解决:
      
       人都有一种小巷思维。 等你遇到一个问题,采取一个方法不通后,往往没有想另外一种方法,导致你进入死胡同。   稍稍绕个弯就可以。 <input id="Button1" type="button" value="button" ShowIframe('危险源的添加','WebForm1.aspx?id=<%#Eval("ID")%>',500,300)" />   很无语 下次不再出这种低级错误了。