在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. Web API零碎知识

    查看EF生成的sql的方法 1.通过在context中设置可以追踪EF[版本必须是6.0或以上]中生成的sql public BookServiceContext() : base("nam ...

  2. Android黑科技,读取用户短信+修改系统短信数据库

    安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题.这篇博客就秀一波“黑科技”. 读取用户短信 Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证 ...

  3. AVT Vimba与OpenCV环境配置

    近来,由于项目需求,需要使用AVT的一款相机采集图像并进行相应的算法处理.环境的配置过程较为复杂,特此记录,以做备忘.也给有需要的小伙伴们一些key point的分享. 搭建环境:Windows7 + ...

  4. 不指定order by时Sql的排序

    在sql中不指定Order by,排序是按照主键吗?答案是不一定.举个例子:   查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引   ...

  5. c语言构建动态数组

    #include <stdio.h> #include <stdlib.h> int main(void) { int len; int * arr; printf(" ...

  6. IIS 7 支持10万并发请求

    原文链接:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error S ...

  7. css之自动换行-设计师零张

    自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的方法 对于div,p等块级元素 正常文字的换行(亚洲文字和非亚洲文字)元素拥 ...

  8. Python学习笔记捌——面向对象高级编程

    __slots__特殊变量的使用: 由于Python是动态语言,允许先编写类,然后在创建实例的时候添加属性或者方法:而__slots__特殊变量就是,限制往类里添加属性的: 在创建类的时候,使用__s ...

  9. 【转帖】C# DllImport 系统调用使用详解 托管代码的介绍 EntryPoint的使用

    1      DLLImport的使用 using System; using System.Runtime.InteropServices; //命名空间 class Example { //用Dl ...

  10. 一篇非常经典的springMVC注解实现方式详解

    今天公司让搭建个springMVC的注解框架,研究了好半天,网络搜罗了半天,好不容易找到篇,拿来分享下: 原文出处:http://itxxz.com/a/kuangjia/2014/0531/4.ht ...