在asp项目中,这种情况是经常出现的,前段时间通过查找资料以及自己尝试,找到一种解决方案,但是不知是否有更好的方案,以后发现再进行记录。

一.思路

  在本次项目中,在一个函数中需要让用户判断,并根据用户的选择进行相关的操作,最开始是希望在用户需要确认的地方弹出确认框,然后程序暂停,用户选择之后再继续运行,于是在需要确认的地方插入js代码,但是通过调试发现,在函数中间插入弹出对话框的js代码,整个函数执行完毕之后才会弹出确认对话框,当然也就不能暂停根据用户的选择执行后面的代码,之后也找不到解决方法。后面换了一种做法,首先在页面中放一个隐藏控件,将用户选择的值赋给它,然后再在页面中放一个按钮,用户选择之后触发该按钮将值传给后台。刚开始没有添加该按钮,直接在同一个函数中区获取值发现每次都是获取到上一次选择的结果,然后才意识到用户做出选择之前就已经向后台返回,后台通过js弹出的对话框是处于另外一个对话中,在对隐藏控件进行赋值之前,主函数就已经返回,所以只能通过js再次触发按钮事件(当然其它事件也可以)返回用户的选择值。

  这样只能在另一个事件函数中进行需要的处理,但是主函数中的变量值都会清空,所以需要将在逻辑上要在一次对话中用到和变量设置为static变量。

  还有一个问题就是,通过js触发按钮事件,准确说我的情况是用户在操作界面鼠标点击触发的事件函数中插入js代码触发返回隐藏控件值的按钮事件,发现在js触发按钮事件函数中更新其它控件(跟新gridview的数据)的代码以及使用公共类的消息弹出框都无效了。后来发现如果都通过js触发就可以了,也就是说最开始的触发一系列操作的控件事件函数也通过js触发,那么在该函数中插入js触发其它控件事件函数就不会出现上述问题。

二.实现

  1.在页面中插入隐藏控件HiddenField以及用于返回值的按钮控件,设置按钮style="display:none;"。注意:如果直接设置visible属性为false,那么你会发现运行的时候找不到该按钮而出错,这也是我自己遇到的问题。

  2.在需要用户去确认的地方插入js代码:

 string js = string.Format("document.getElementById('{0}').value=confirm('sure?');document.getElementById('{1}').click();", hid.ClientID, hidBtn.ClientID);
ClientScript.RegisterStartupScript(GetType(), "confirm", js, true);

  这里也有一点要提一下,如果想要scrip的UpdatePanel中的控件函数执行插入的js代码最好使用ScriptManager.RegisterStartupScript(UpdatePanelID,UpdatePanelID.GetType(), string key, string js, true);本来开始是使用ClientScrip不可以执行的,但是后来又可以了,不知道为啥,先记录一下。

  3.在hidBtn的click事件函数中得到用户确认框的选择值即隐藏控件hid的值,执行先关的操作。

asp.net在后台弹出confirm确认对话框并获取用户选择的值做出相应的操作的更多相关文章

  1. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  2. 转 如何在调用WCF服务之前弹出一个确认对话框

    自定义InteractiveChannelInitializer(InvocationConfirmationInteractiveChannelInitializer)定义如下.我们在BeginDi ...

  3. Asp.Net后台弹出确认提示窗Confirm

    前端js代码: function MyConfirm(message, guid) { if (confirm(message) == true) { document.getElementById( ...

  4. [转] 在Asp.net前台和后台弹出提示框

    一.在前台弹出提示框 1.点击"A"标记或者"控件按钮"弹出提示框 <asp:LinkButton ID="lbtnDel" runa ...

  5. asp.net 后台弹出提示框

    1.后台弹出提示信息方法 Response.Write("<scripttype="text/javascript">alert('你所查询的数据不存在!') ...

  6. 【转载】asp.net 后台弹出提示框

    感觉这种最好用: public void showMessage(string str_Message) { ClientScript.RegisterStartupScript(this.GetTy ...

  7. T100弹出是否确认窗体方式

    例如: IF NOT cl_ask_confirm('aim-00108') THEN CALL s_transaction_end(') CALL cl_err_collect_show() RET ...

  8. 关于abp中使用的sweetalert对话框组件的confirm确认对话框中的一个坑

    今天修改了一个功能,限制删除用户,在删除的时候不满足条件的时候提示用户原因,使用的sweet alert组件. abp框架前端集成了sweet alert 对http请求的error做了全局处理,我在 ...

  9. jquery仿alert提示框、confirm确认对话框、prompt带输入的提示框插件[附实例演示]

    jquery仿alert提示框.confirm确认对话框.prompt带输入的提示框插件实例演示 第一步:引入所需要的jquery插件文件: http://www.angelweb.cn/Inc/eg ...

随机推荐

  1. asp.net实现将网页存为mht格式文件,类似于网页另存为mht功能

    MHT 首先说一下什么是mht格式文件,MHT叫“web单一文件”,就是把网页中包含的图片,CSS文件以及HTML文件全部放到一个MHT文件里面,而且浏览器可以直接读取显示.可以通过ie浏览器将一个网 ...

  2. Geodatabase - 删除要素

    //删除要素类. //例如:workspacePath=@"G:\doc\gis\1.400\data\pdb.mdb", featureClassPath="res2_ ...

  3. C#读取USB的一些相关信息

    在USB\VID_05A9&PID_2800\5&1BFE1C47&0&8里面,USB代表设备类型,5&1BFE1C47&0&8代表设备连接位置 ...

  4. Mysql存储过程分析

    为了搞明白为什么mysql的存储过程是高效的,我们需要理解mysql的执行流程是什么,当输入sql语句之后,mysql会先进行sql语句语法正确性检查,然后再进行编译,然后才执行,最后把结果返回.如下 ...

  5. PHP学习路上的一点心得

    继学些了java后,接触php的项目后发现 php真的也是很强大的一门语言,这只是一篇回想,想到什么就写什么把,大家随便看看. 1.php其实无需等待,一般的改完代码后直接刷新页面即可,不需要像jav ...

  6. 字典:当索引不好用时2 - 零基础入门学习Python026

    字典:当索引不好用时2 让编程改变世界 Change the world by program 上节课我们学习到在一些情况下,比序列更实用的映射类型:字典.我们知道字典也有个关键符号就是大括号(也叫花 ...

  7. [CSAPP]并发与并行

    学了这么久的计算机,并发与并行的概念理解的一直不够透彻.考研复习那会儿,以为自己懂了,然而直到看了CSAPP才算是真正明白了这俩个概念. 并发(concurrency) 流X和流Y并发运行是指,流X在 ...

  8. C语言解析日志,存储数据到伯克利DB 2

    #编译程序 gcc -o historydb historydb.c -ldb #将2013年8月9日的用户记录写入数据库 (程序自动识别新用户入库,跳过老用户) ./historydb -f .us ...

  9. The end of other

    The end of other For language training our Robots want to learn about suffixes. In this task, you ar ...

  10. PHP与C++的不同

    由于工作需要,需要学习一下PHP,由于3年的C++背景,在刚开始学习PHP的过程中,有些不习惯,经过一段时间的学习,总结了一些PHP与C++的不同. 1.应用场景 在谈两种语言不同的时候,首先需要了解 ...