项目中遇到的问题,因为需求的变更,现在要实现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>
问题是解决了,可是还是翻工了,有点不甘心,希望有高手帮忙指点下这个问题到底怎么才能够更简单的解决。