请教客户端生成JS语句的问题
有一个想法,在一个页面中可执行多个方法
每个方法都有一个判断,如何判断成立的话就弹出一个alert的对话框作提示,
现在想把几个方法中的提示字符连接起来一起显示,感觉用户比较好接受。
并在类中申明:
StringBuilder strberScript = new StringBuilder();
当多次执行JSRunStr()方法时。字符都连接累加到strberScript
现在的问题是页面只生成第一次执行的JSRunStr生成的JS语句。而不是想要得到的最后一个次执行JSRunStr生成的JS语句 public void JSRunStr(string Js)
        {
            strberScript.Append(Js);
            page = (Page)System.Web.HttpContext.Current.Handler;
            if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"))
                page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr", strberScript.ToString(), true);
            else
                page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr1", strberScript.ToString(), true);
        }

解决方案 »

  1.   


    页面中的程序执行了几次生成JS语句的方法,
    但是页面里只生成是第一次执行得到的JS语句
    我现在需要得是如何得到最后一次生成的JS语句
      

  2.   

    请教各位兄台:
    页面中的程序执行了几次生成JS语句的方法, 
    但是页面里只生成是第一次执行得到的JS语句 
    我现在需要得是如何得到最后一次生成的JS语句
      

  3.   

    需要在服务器端这么复杂的生成吗?
    直接在客户端写上 javascript 脚本,然后服务器端负责控件事件中的 js 调用,难道不行吗?
      

  4.   

    就是一次性提示
    alert('第一条语句,第二条语句,第三条语句')这样吗?
    想通过 MBStencil()中的strberMes.Append(msg);
    把提示字符联起来
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;namespace Luoxp2.Web
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            StringBuilder strberMes = new StringBuilder();        protected void Page_Load(object sender, EventArgs e)
            {
                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));
                //想实现提得的提示包括三条语句:第1条语句 第2条语句 第3条语句
            }
            ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {
                Page page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr", Js, true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr1", Js, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {
                strberMes.Append(msg);
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;
            }
        }
    }
      

  5.   

    呵呵给你换种方式,首先在前台页面中放一个<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    .CS页面中格式如下
            StringBuilder strberMes = new StringBuilder();
            protected void Page_Load(object sender, EventArgs e)
            {
                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));
                //想实现提得的提示包括三条语句:第1条语句 第2条语句 第3条语句
            }        ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {
                this.Label1.Text = "<script>" + Js + "</script>";
             }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {
                strberMes.Append(msg);
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;
            }
      

  6.   

    现在的问题是页面只生成第一次执行的JSRunStr生成的JS语句。而不是想要得到的最后一个次执行JSRunStr生成的JS语句 
    ---------------------
    那就跟踪调试下strberScript的值咯.
    public static int i=0;
     public void JSRunStr(string Js)
            {
                strberScript.Append(Js);
                page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"+i))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr"+i, strberScript.ToString(), true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr1"+i+1, strberScript.ToString(), true);
            }
      

  7.   

    兄台的也是一个思路
    但我的方法其实是写在类里的
    并不想每个调用的该方法的页面都加个LABEL吧
      

  8.   

    你的例子.如果页面刷一次的话,你的strberMes 就会被重置.你可以用ViewState把你每次的信息存一下.否则不会累加的
      

  9.   

     修改的结果却弹出三个对话框。我想要的只是最后一个对话框using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;namespace Luoxp2.Web
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            StringBuilder strberMes = new StringBuilder();
            public static int count = 0;        protected void Page_Load(object sender, EventArgs e)
            {
                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));
                //想实现得的只是一次提示,提示内容包括字符是三条的总合:第1条语句 第2条语句 第3条语句
            }
            ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {            Page page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr" + count))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + count, Js, true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + count+"_", Js, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {
                count++;
                strberMes.Append(msg);
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;
            }
        }
    }
      

  10.   

     protected void Page_Load(object sender, EventArgs e)
            {
                //JSRunStr(MBStencil("第1条语句"));
                //JSRunStr(MBStencil("第2条语句"));
                MBStencil("第1条语句");
                MBStencil("第2条语句");
                JSRunStr(MBStencil("第3条语句"));
                //想实现提得的提示包括三条语句:第1条语句 第2条语句 第3条语句
            }
      

  11.   

    修改的结果却弹出三个对话框。我想要的只是最后一个对话框 你这个运行三次当然是注册了三次脚本        StringBuilder strberMes = new StringBuilder();
            private string msg1 = null;
            protected void Page_Load(object sender, EventArgs e)
            {
                MBStencil("第1条语句"); MBStencil("第2条语句"); MBStencil("第3条语句");
                JSRunStr(returnmsg());            //想实现提得的提示包括三条语句:第1条语句 第2条语句 第3条语句
            }        ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {
                            Page page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr", Js, true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr1", Js, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public void MBStencil(string msg)
            {
                strberMes.Append(msg);
            }
            public string returnmsg()
            {
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                //msg1 = "alert('" + strberMes.ToString() + "')";
                return msg1;
            }
      

  12.   

    是这意思吗?StringBuilder strberMes = new StringBuilder();        protected void Page_Load(object sender, EventArgs e)
            {
                MBStencil("第1条语句");
                MBStencil("第2条语句");
                JSRunStr(MBStencil("第3条语句"));
                //想实现提得的提示包括三条语句:第1条语句 第2条语句 第3条语句
            }
            ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {
                Page page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr", Js, true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr1", Js, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {
                strberMes.Append(msg);
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;
            }
      

  13.   

    TO:网络生涯
    有一个问题我的这个方法是放在类中执行的
    并且JSRunStr(MBStencil("第条语句"))两个方法是关联在一起共同执行的
    如果按兄台的思路其实也是把字符串联接在一起统一执行JS语句
    感觉通知性不强,因为我不感觉我的类中会出现多少个这个提示方法
      

  14.   

    TO:网络生涯
    有一个问题我的这个方法是放在类中执行的
    并且JSRunStr(MBStencil("第条语句"))两个方法是关联在一起共同执行的
    如果按兄台的思路其实也是把字符串联接在一起统一执行JS语句
    感觉通知性不强,因为我不感觉我的类中会出现多少个这个提示方法
      

  15.   

    换了一个思路,将消息提示放在数组中。。但是同相也要多次JS语句,但是页面中最终生成的还是第一次
    另外一个兄台提示的动态加载label 控件作为装载js语句的容器方法也很好。。
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;
    using System.Collections.Generic;
    namespace Luoxp2.Web
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            StringBuilder strberMes = new StringBuilder();
            public List<string> listStr = new List<string>();        protected void Page_Load(object sender, EventArgs e)
            {
                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));
                //想实现得的只是一次提示,提示内容包括字符是三条的总合:第1条语句 第2条语句 第3条语句
            }
            ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {
                listStr.Add(Js);
                string strMsg = new Luoxp2.Class.Config().GetStrFromArr(listStr.ToArray(),"");//将数组拼接成字符串的方法
                Page page = (Page)System.Web.HttpContext.Current.Handler;
                if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"+listStr.Count.ToString() ))
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + listStr.Count.ToString(), strMsg, true);
                else
                    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + listStr.Count.ToString() + "_", strMsg, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {            
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += msg;
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;            
            }
        }
    }
      

  16.   

    将错误信息做成一个字符串,然后用 alert 一次性提示出来?
      

  17.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;
    using System.Collections.Generic;
    namespace Luoxp2.Web
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            StringBuilder strberMes = new StringBuilder();
            Label label = new Label();        protected void Page_Load(object sender, EventArgs e)
            {
                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));
                //想实现得的只是一次提示,提示内容包括字符是三条的总合:第1条语句 第2条语句 第3条语句
            }
            ///
            /// <summary>
            ///执行JS语句;
            /// </summary>
            /// <param name="Js">运行的JavaScript语句</param>
            public void JSRunStr(string Js)
            {           
                Page page = (Page)System.Web.HttpContext.Current.Handler;
                label.ID = "JSRunStr";
                label.Text = " <script>" + Js + " </script>";
                label.Style.Add(HtmlTextWriterStyle.Display, "none");
                page.Controls.Add(label);            //if (!page.ClientScript.IsClientScriptBlockRegistered("JSRunStr"+listStr.Count.ToString() ))
                //    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + listStr.Count.ToString(), strMsg, true);
                //else
                //    page.ClientScript.RegisterStartupScript(this.GetType(), "JSRunStr" + listStr.Count.ToString() + "_", strMsg, true);
            }
            /// <summary>
            /// 弹出消息框模板
            /// </summary>
            /// <param name="msg">弹出框内容,可用\\n换行\\t空格</param>
            /// <returns>返回模板</returns>
            public string MBStencil(string msg)
            {
                strberMes.Append(msg);
                string msg1 = "alert(\"";
                msg1 += "信息提示:\\t\\t\\t\\t\\n";
                msg1 += "------------------------------------------------";
                msg1 += "\\n\\n";
                msg1 += strberMes.ToString();
                msg1 += "\\n\\n";
                msg1 += "-------------------------------------------------";
                msg1 += "\\n";
                msg1 += "\");";
                return msg1;            
            }
        }
    }
      

  18.   

                JSRunStr(MBStencil("第1条语句"));
                JSRunStr(MBStencil("第2条语句"));
                JSRunStr(MBStencil("第3条语句"));---------JSRunStr(MBStencil("第1条语句&第2条语句&第3条语句"));