我做的是一个表格打印页面,用户填写数据的同时,数据上传到服务器中,并调用下面的打印代码,打印表格。
我前台页面中用了“UpdatePanel”
       
 protected void btnSave_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language=\"javascript\" type=\"text/javascript\">");
            sb.Append("        function PrintOneURL() {");
            sb.Append("            var LODOP;");
            sb.Append("            LODOP = getLodop();");
            sb.Append("            LODOP.PRINT_INIT(\"预付审批表\");");
            sb.Append("            LODOP.SET_PRINT_PAGESIZE(1, 0, 0, \"A4\");");
            sb.Append("            LODOP.PRINT_INITA(0, 0, 800, 1124, \"预付审批表\");");
            sb.Append("            LODOP.ADD_PRINT_SETUP_BKIMG(\"<img border='0' src='BJ.jpg'>\");");
            sb.Append("            LODOP.SET_SHOW_MODE(\"BKIMG_PRINT\", true);");
            sb.Append("            LODOP.SET_PRINT_STYLE(\"FontSize\", 11);");
            sb.Append("            LODOP.ADD_PRINT_TEXT(10, 10, 600, 38, \"第一行第二行\");");
            sb.Append("            LODOP.SET_SAVE_MODE(\"QUICK_SAVE\",true);");
            sb.Append("            LODOP.PREVIEW();");
            sb.Append("            return false; ");
            sb.Append("        };");
            sb.Append("    </script>");            //Response.Write(sb);
            JsStr.Text = sb.ToString();            //string code = "<script>alert('123')</script>";
            //ClientScript.RegisterStartupScript(this.GetType(), "myJs", code, true);
            ScriptManager.RegisterStartupScript(uid, uid.GetType(), "", "PrintOneURL();", true);
        }

解决方案 »

  1.   

    UpdatePanel 不能使用无刷新机制,像你这种写法,页面要刷新js才能执行。
      

  2.   

           
     protected void btnSave_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("            var LODOP;");
            sb.AppendLine("            LODOP = getLodop();");
            sb.AppendLine("            LODOP.PRINT_INIT(\"预付审批表\");");
            sb.AppendLine("            LODOP.SET_PRINT_PAGESIZE(1, 0, 0, \"A4\");");
            sb.AppendLine("            LODOP.PRINT_INITA(0, 0, 800, 1124, \"预付审批表\");");
            sb.AppendLine("            LODOP.ADD_PRINT_SETUP_BKIMG(\"<img border='0' src='BJ.jpg'>\");");
            sb.AppendLine("            LODOP.SET_SHOW_MODE(\"BKIMG_PRINT\", true);");
            sb.AppendLine("            LODOP.SET_PRINT_STYLE(\"FontSize\", 11);");
            sb.AppendLine("            LODOP.ADD_PRINT_TEXT(10, 10, 600, 38, \"第一行第二行\");");
            sb.AppendLine("            LODOP.SET_SAVE_MODE(\"QUICK_SAVE\",true);");
            sb.AppendLine("            LODOP.PREVIEW();");        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "print", sb.ToString(), true);
        }
      

  3.   

    你这里的问题在于 JsStr.Text = sb.ToString(); 这句。这跟什么 UpdatePanel 没有关系。只有刚刚加载页面时才会去那样执行 javascript 代码。但是当页面渲染完毕,你再动态替换某个 html element 内部部分的字符串,这种东西就不会被作为 javascript 再次被执行一遍了。
      

  4.   

    例如你还可以写成这样        StringBuilder sb = new StringBuilder();
            sb.Append("        function PrintOneURL() {");
            sb.Append("            var LODOP;");
            sb.Append("            LODOP = getLodop();");
            sb.Append("            LODOP.PRINT_INIT(\"预付审批表\");");
            sb.Append("            LODOP.SET_PRINT_PAGESIZE(1, 0, 0, \"A4\");");
            sb.Append("            LODOP.PRINT_INITA(0, 0, 800, 1124, \"预付审批表\");");
            sb.Append("            LODOP.ADD_PRINT_SETUP_BKIMG(\"<img border='0' src='BJ.jpg'>\");");
            sb.Append("            LODOP.SET_SHOW_MODE(\"BKIMG_PRINT\", true);");
            sb.Append("            LODOP.SET_PRINT_STYLE(\"FontSize\", 11);");
            sb.Append("            LODOP.ADD_PRINT_TEXT(10, 10, 600, 38, \"第一行第二行\");");
            sb.Append("            LODOP.SET_SAVE_MODE(\"QUICK_SAVE\",true);");
            sb.Append("            LODOP.PREVIEW();");
            sb.Append("            return false; ");
            sb.Append("        };");
            sb.Append("        PrintOneURL();");        ScriptManager.RegisterStartupScript(uid, uid.GetType(), "", sb.ToString(), true);总之,使用 UpdatePanel 当然是可以执行 js 代码,包括你也可以在浏览器端去定义或者重新定义一个自定义 javascript 函数。单就不要使用 JsStr.Text = sb.ToString();  这种形式就可以了。