在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. javascript 打开新窗口(window.open)

    打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...

  2. (转)[老老实实学WCF] 第一篇 Hello WCF

    http://blog.csdn.net/songyefei/article/details/7363296#comments 老老实实学WCF  第一篇 Hello WCF WCF(Windows ...

  3. http 压缩

    HTTP压缩是在Web服务器 和浏览器间传输压缩文本内容的方法.HTTP压缩采用通用的压缩算法如gzip等压缩HTML.JavaScript或 CSS文件.压缩的最大好处就是降低了网络传输的数据量,从 ...

  4. 点击<a>标签,禁止页面自动跳到顶部的解决办法

       最近在开发一个小web的时候想给一个按钮增加一个弹出dialog功能,但是发现点击按钮后页面总是自动滚动至顶部,这点从用户体验上来讲是极其不爽的,于是开始跳进google大池寻求解决办法.网上的 ...

  5. Gradle 编译时选择不同的 google-services.json

    在做的安卓应用需要在 debug 和 release build中使用不同的谷歌服务账号,要用到不同的google-serivces.json ,手动替换的话太费时费力,好在万能的gradle可以完成 ...

  6. Ubuntu 12.04.5 LTS 上安装hadoop 2.6.0后运行自带的例程wordcount

    注:我所有的操作均通过Xshell 5远程连接Ubuntu进行实施 第一步:启动hadoop,利用jps查看hadoop是否已经启动,如果没有启动用start-dfs.sh脚本启动(hadoop2.X ...

  7. [OC笔记] static 关键字

    在变量声明前加上static关键字,可以使局部变量保留多次方法调用所得到的值.当多个方法对一个静态变量进行操作时,多个方法共享同一个静态变量的值.

  8. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  9. js迭代器模式

    在迭代器模式中,通常有一个包含某种数据的集合的对象.该数据可能储存在一个复杂数据结构内部,而要提供一种简单 的方法能够访问数据结构中的每个元素. 实现如下: //迭代器模式 var agg = (fu ...

  10. 使用 PHP 读取文本(TXT)文件 并分页显示

    <?php //----------------you should save this file as m.php---------------- session_start(); if (e ...