实现asp.net后台代码弹出对话框(相当于confirm)时遇到的问题

项目中遇到的问题,因为需求的变更,现在要实现JS中跟confirm一样的功能,

比方说新增黑名单的一个号码时,点击提交后连接数据库,判断是否在白名单和例外名单中已经存在,若存在,弹出对话框“此号码已存在于白名单,添加后将在白名单中删除此号码,是否真的要添加?”,若用户点确定,则调用后台的一个写好的white_del()方法,取消就算了。

纠结了好长时间,因为aspx页面上都是拖的服务器控件,用不了Ajax。

下面把我从开始到最后解决的过程发出来,希望有高手能帮忙解决一下这个问题,因为到最后我还是把那些控件换成了html标签控件,然后Ajax套ajax才解决。。可怜

一、刚开始的时候,在cs文件中是这样写的:

 string str = string.Format("<script>if(confirm('此号码已存在于白名单,添加后将在白名单中删除此号码,是否真的要添加?')){{0}}</script>", white_del());
  Response.Write(str);

其中white_del()是当用户点击确定后调用的方法。

这样遇到了一个问题,老提示“字符串格式不正确”,最后还是把“{}”去掉才解决。if后面可以不加{}。

可是又出现一个问题,就是还没有出来弹出框,white_del()就已经执行了。不管我怎么修改,都不行。

 

二、后来在网上查资料,希望有解决的办法,貌似好多人都遇到这种问题,我可真不想把写好的页面重新翻工,把服务器控件都换掉。

其中有一篇文章总结的很好,如下:

为什么在项目后台要使用C#调用前台的Javascript代码呢?因为我们在项目开发的过程中,根据项目的需要,我们需要用到其他项目组用VC开发的组件,但是在web后台代码中无法访问这个组件,所以只好在我们项目后台调用前台的Javascript代码了,只要我们成功调用了前台的Javascript代码,就可以方便的操作这个用VC开发的组件了。

      下面总结五中方法实现后台用C#调用前台的Javascript代码。

      方法一、用ClientScript类动态添加脚本 

用法如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。 

ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>"); 

这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。 

可以在程序的任何地方执行,o(∩_∩)o...,是不是很好用呢 

注意执行顺序:先执行Client ,再执行Server 

       方法二、用Response.Write方法写入脚本 

比如在你单击按钮后,先操作数据库,完了后显示已经完成,可以在最后想调用的地方写上 

Response.Write("<script type='text/javascript'>alert();</script>"); 

这个方法有个缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定义,比如:

Response.Write("<script type='text/javascript'>function myfun(){...}</script>"); 

      方法三、是我自认为最灵活的一种,ClientScript.RegisterStartupScript 

实例代码:
StringBuilder sb = new StringBuilder(); 

sb.Append("<script language='javascript'>"); 

sb.Append("Button2_onclick('" + serverPath + "')"); 

sb.Append("</script>"); 

ClientScript.RegisterStartupScript(this.GetType(), "LoadPicScript", sb.ToString()); 

        方法四、Button1.Attributes.Add("onclick", "return Client_Click()"); 

“Client_Click() “是一个前台方法,可以替换成一般的脚本如:retrun confirm('确定删除吗?') 

       方法五、OnClientClick 

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="client_click()" OnClick="Button1_Click" /> 

client_click() 就是javascript的一个方法

(但是需要注意的是vs2003不支持这个方法) 
来源:豆芽博客,地址:http://www.aichengxu.com/article/.Net/145_3.html.


上面的五种方法我没全都试过,上面的那个第三种方法我却狠傻逼的试了,其实跟我刚开始写的那种本质是一样的,还没我那种写着简单呐。。

里面有的方法其实并不适用于我的这种情况,有的方法说的也不是很详细,在网上又专门搜了一下改了还是不行。

 

三、由于项目催的急,没办法,不能老在这个问题上耗着,就翻工从写了,还不止一个页面要改,累死了都。

尼玛需求变更害死人呐!!

下面发一下我最后用Ajax套Ajax解决此问题的代码

 <script type="text/javascript">
       
         var Tel_txt=document.getElementById("Tel_txt");
          var Name_txt=document.getElementById("Name_txt");
         var patrn="^0{0,1}(13[0-9]|15[3-9]|15[0-2]|18[0-9])[0-9]{8}$";
        function edit()
        {
            if(Tel_txt.value=="")
            {
                alert("手机号码不能为空!");
                return false;
            }
            if(Tel_txt.value.length!=11)
            {
                alert("手机号码必须是11位数字!");
                return false;
            }
            
             falg=Tel_txt.value.search(patrn);
             if (falg==-1){
                                alert("手机号码格式不正确!");
                                return false;
                        }
        
            
            $.post("PerInsert.aspx",{type: "edit",num:Tel_txt.value,username:Name_txt.value},function(data){
           
             if(data.toString()=="0")
                {
                   alert("此号码已存在!");
                }
            
                if(data.toString()=="1")
                {
                   if( confirm("此号码已存在于白名单,增加后将在白名单中删除此号码,是否真的要增加?")==true)
                   {
                             $.post("PerInsert.aspx",{del: "delwhite",num:Tel_txt.value,username:Name_txt.value},function(data){
                                if(data.toString()=="0")
                                {
                                   alert("增加成功!白名单中此号码已被删除。");
                                   window.location = "BlackList.aspx";
                                   
                                }
                                       
                             })
                         }
               }
                if(data.toString()=="2")
                {
                   if( confirm("此号码已存在于例外名单,增加后将在例外名单中删除此号码,是否真的要增加?")==true)
                   {
                        $.post("PerInsert.aspx",{del: "delexcept",num:Tel_txt.value,username:Name_txt.value},function(data){
                                if(data.toString()=="1")
                                {
                                    alert("增加成功!例外名单中此号码已被删除。");
                                    window.location = "BlackList.aspx";
                                }
                                    
                             })

                   }
                }
                if(data.toString()=="增加成功")
                {
                  alert("增加成功!");
                  window.location = "BlackList.aspx";
                }
            
            })
         }
    
    </script>


问题是解决了,可是还是翻工了,有点不甘心,希望有高手帮忙指点下这个问题到底怎么才能够更简单的解决。

 

 


 

你可能感兴趣的:(JavaScript,Ajax,function,脚本,asp.net,button)