问题描述
我做的是一个表格打印页面,用户填写数据的同时,数据上传到服务器中,并调用下面的打印代码,打印表格。我前台页面中用了“UpdatePanel”protectedvoidbtnSave_Click(objectsender,EventArgse){StringBuildersb=newStringBuilder();sb.Append("<scriptlanguage="javascript"type="text/javascript">");sb.Append("functionPrintOneURL(){");sb.Append("varLODOP;");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("<imgborder='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("returnfalse;");sb.Append("};");sb.Append("</script>");//Response.Write(sb);JsStr.Text=sb.ToString();//stringcode="<script>alert('123')</script>";//ClientScript.RegisterStartupScript(this.GetType(),"myJs",code,true);ScriptManager.RegisterStartupScript(uid,uid.GetType(),"","PrintOneURL();",true);}
解决方案
解决方案二:
UpdatePanel不能使用无刷新机制,像你这种写法,页面要刷新js才能执行。
解决方案三:
protectedvoidbtnSave_Click(objectsender,EventArgse){StringBuildersb=newStringBuilder();sb.AppendLine("varLODOP;");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("<imgborder='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);}
解决方案四:
你这里的问题在于JsStr.Text=sb.ToString();这句。这跟什么UpdatePanel没有关系。只有刚刚加载页面时才会去那样执行javascript代码。但是当页面渲染完毕,你再动态替换某个htmlelement内部部分的字符串,这种东西就不会被作为javascript再次被执行一遍了。
解决方案五:
例如你还可以写成这样StringBuildersb=newStringBuilder();sb.Append("functionPrintOneURL(){");sb.Append("varLODOP;");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("<imgborder='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("returnfalse;");sb.Append("};");sb.Append("PrintOneURL();");ScriptManager.RegisterStartupScript(uid,uid.GetType(),"",sb.ToString(),true);
总之,使用UpdatePanel当然是可以执行js代码,包括你也可以在浏览器端去定义或者重新定义一个自定义javascript函数。单就不要使用JsStr.Text=sb.ToString();这种形式就可以了。