本帖最后由 zhangxun829 于 2012-05-11 10:16:28 编辑

解决方案 »

  1.   

    http://www.cnblogs.com/zyx_blog/articles/1993473.html
      

  2.   

    http://wenku.baidu.com/view/4d3628d95022aaea998f0f8e.html
      

  3.   

       bool z = Das.ExecSql(strsql);
         if (z)
           {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "wBox_close", "<script>function (close)</script>");                                 
            }
     我试过了 没有反应
      

  4.   

    直接调用ASPX页面中的JS函数 用Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script></script>"); 能实现 ,但是我要引用 WBOX.JS文件中的函数 这样写没有反应。不知道哪里错了求解答
      

  5.   

    应该是页面回传了,没有来得及执行客户端的方法
    如果你给了ImageButton 一个服务器短的单击事件,那就在ImageButton的前面隐藏一个链接,
    并且ImageButton的class去掉
    成<a id="tempclick" class="wBox_close"  href="#"></a>
    <asp:ImageButton/>
    注册脚本改成 Page.ClientScript.RegisterStartupScript(this.GetType(), "tempclick", "<script>   document.getElementById('tempclick').click(); </script>");   
    我没有试啊,感觉是这个问题。
      

  6.   

    asp:ImageButton 其他的内容不变,我这只是一个演示
      

  7.   

    好像是不能执行 click事件 
      

  8.   

    我换了个思路 直接隐藏一个按钮class=“wbox” <head id="Head2" runat="server">
        
      <script type="text/javascript">
      function Click(o)
          {
               event.returnValue = false;
               document.getElementById ("ImageButton2").click(); 
             
          }</script><asp:ImageButton ID="ImageButton2" runat="server" class="wBox_close"/>
      
    code]然后在CS文件中调用这个JS函数[code=C#]Page.ClientScript.RegisterStartupScript(this.GetType(), "Click", "<script>click(o)</script>"); 但是还是不能执行。很难理解网上查了下都是这么在CS中调用JS函数的。求高人解答错在哪里
      

  9.   

    我的cms项目中的js引擎类   /// <summary>
        /// JSEngine 在后台运行js的解释器返回值
        /// </summary>
        public class JSEngine
        {
            //初始化加载程序的字符串;
            public static readonly String _jsString = @"class theEval{ public function Eval(str:String):String {return eval(str)}}";
            public static readonly String _jsClassName = @"theEval";
            public static readonly String _jsMethodName = @"Eval";
            //定义对象
            public static object _evalObject = new object();
            public static Type _evalType = new object().GetType();
            //构造函数
            static JSEngine()
            {
                CreatJSEngine(ref _evalObject, ref _evalType, _jsString, _jsClassName);
            }        /// <summary>
            /// 初始化引擎的方法
            /// </summary>
            /// </summary>
            /// <param name="evalObject">指定一个 已存在的变量 保存 使用evalType的类型生成一个实例</param>
            /// <param name="evalType">指定一个 已存在的变量 保存 生成的程序集中有指定名称的对象type</param>
            /// <param name="jsString">指定用来生成程序集的代码文本</param>
            /// <param name="jsClassName">指定用来进行调用的程序集中的类别名称</param>
            private static void CreatJSEngine(ref object evalObject, ref Type evalType, string jsString, string jsClassName)
            {
                CodeDomProvider _provider = new JScriptCodeProvider();
                CompilerParameters _parameters = new CompilerParameters();
                _parameters.GenerateInMemory = true;
                CompilerResults _result = _provider.CompileAssemblyFromSource(_parameters, jsString);
                Assembly _assembly = _result.CompiledAssembly;
                evalType = _assembly.GetType(jsClassName);
                evalObject = Activator.CreateInstance(evalType);
            }        /// <summary>
            /// StringEval
            /// </summary>
            /// <param name="inp_JSString">传入一个表达式</param>
            /// <returns>返回一个表达式的值</returns>
            public static object StringEval(string inp_JSString)
            {
                return _evalType.InvokeMember(_jsMethodName, BindingFlags.InvokeMethod, null, _evalObject, new object[] { inp_JSString });
            }        /// <summary>
            /// StringEval
            /// </summary>
            /// <param name="inp_JSFunctionString">指定用来生成程序集的代码文本</param>
            /// <param name="inp_JSFunctionClassName">指定用来进行调用的程序集中的类别名称</param>
            /// <param name="inp_JSFunctionClassFuncName">指定用来进行调用的程序集中的类别中的函数的名称</param>
            /// <param name="inp_ParameterObject">要传递到程序集中的变量对象数组,无参时使用 new object[0]</param>
            /// <returns>返回函数调用的值</returns>
            public static object StringEval(string inp_JSFunctionString, string inp_JSFunctionClassName, string inp_JSFunctionClassFuncName, object[] inp_ParameterObject)
            {
                object ClosureevalObject = null;
                Type ClosureevalType = null;
                CreatJSEngine(ref ClosureevalObject, ref ClosureevalType, inp_JSFunctionString, inp_JSFunctionClassName);
                return ClosureevalType.InvokeMember(inp_JSFunctionClassFuncName, BindingFlags.InvokeMethod, null, ClosureevalObject, inp_ParameterObject);
            }        /// <summary>
            /// StringEval
            /// </summary>
            /// <param name="inp_JSString">传入一个表达式</param>
            /// <param name="inp_theType">指定的要返回的值类型</param>
            /// <returns>返回的值</returns>
            public static object StringEval(string inp_JSString, Type inp_theType)
            {
                return Microsoft.JScript.Convert.Coerce(_evalType.InvokeMember(_jsMethodName, BindingFlags.InvokeMethod, null, _evalObject, new object[] { inp_JSString }), inp_theType);
            }
        }
      

  10.   

     ifr.load(
     。
      $it.find('.wBox_close').click(_this.close);
     注册了 class是 wBox_close的 Dom对象的 click处理函数_this.close估计是 ifr 还没有 完成这个注册过程,Page.ClientScript.RegisterStartupScript里生成的js就已经执行了这种情况最搓的方案是 加个延迟时间在执行RegisterStartupScript里生成的js
      

  11.   

    你干嘛非的在css中调用js啊,你用的jquery,直接$("id").css在这里更改css不就完了
      

  12.   

    嗯 后来我测试了下 确实是执行了 ImageButton.click() 但是页面不关闭 必须要手动点击ImageButton才能关闭。应该是你说的没有完成注册 Page.ClientScript.RegisterStartupScript就已经执行JS了,弱弱的问一下延时怎么加?
      

  13.   


    Page.ClientScript.RegisterStartupScript 的内容改成
         StringBuilder sb = new StringBuilder();
            sb.AppendLine("<script  type=\"text/javascript\">");
            sb.AppendLine("onload = function() {"); 
            sb.AppendLine("         Click();");     
            sb.AppendLine("}");
            sb.AppendLine("</script>");
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Click", sb.ToString());试试
      

  14.   

    运行结果溢出 
    <script type="text/javascript"> 
    onload = function click() {
    click(); 
    }
    </script>
      

  15.   

     我想直接把关闭弹出层的函数输出到客户端执行但是老是报错     Response.Write("<script>$(function(){$("#wBox").remove();})</script>"); 预处理器指令必须作为一行的第一个非空白字符出现
      

  16.   

    Response.Write 的内容会出现在 生成的HTML的前面:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
      

  17.   

    感谢 bonnibell 提供的思路。虽然最后还是没有能够将jQuery函数调用成功,但是我要得效果还是实现了。我重新写了关闭iframe弹出层
    function click1()
    {
    parent.document.getElementById("XXX").style.display = "none";}
     
    Page.ClientScript.RegisterStartupScript(this.GetType(), "click1", "<script>   document.getElementById('click1').click(); </script>");   
      

  18.   

     自己钻了死胡同 调用jQuery函数不成功,就没想到 重写关闭函数 。。