ASP.NET c# 修复函数库内自定义ConfirmMessagebox 的 OK 事件

2024-01-18

我们创建了一个从 C# 通过 javascript 动态显示模态弹出消息的函数,它工作正常,但我们想添加一个参数,以便我们可以传递一个函数委托(或事件处理程序),如果用户按下“确定”按钮,该函数将被调用。有什么建议么?

Postdata:我们不需要典型的“确认您要按下此按钮”的解决方案,而是需要一个在必要时在流程的任何部分要求确认的功能。示例:用户单击“删除项目”按钮,在代码隐藏中检查该项目是否具有某种依赖性,因此显示一条确认消息,其中包含传递委托deleteitemconfirmed()的mensaje函数,如果用户单击“确定”,则调用委托...

库中的函数:

public static void Mensaje(string mensaje, EventHandler EventoClickLLamar, bool botoncancelar, string cssclass, Color colorfondo)
{
    string colorfondox = ColorTranslator.ToHtml(colorfondo);

    string idbotonok = EventoClickLLamar == null ? "" : EventoClickLLamar.Method.Name.Replace("_Click", "");
    string script =
        " function verifyStyle(selector) {" + " \r\n" +
        "   var rules;" + " \r\n" +
        "   var haveRule = false;" + " \r\n" +
        "                 " + " \r\n" +
        "   if (typeof document.styleSheets != \"undefined\") {   //is this supported" + " \r\n" +
        "     var cssSheets = document.styleSheets;" + " \r\n" +
        "     " + " \r\n" +
        "     outerloop:" + " \r\n" +
        "     for (var i = 0; i < cssSheets.length; i++) {" + " \r\n" +
        "         " + " \r\n" +
        "          //using IE or FireFox/Standards Compliant" + " \r\n" +
        "         rules =  (typeof cssSheets[i].cssRules != \"undefined\") ? cssSheets[i].cssRules : cssSheets[i].rules;" +
        " \r\n" +
        "         " + " \r\n" +
        "          for (var j = 0; j < rules.length; j++) {" + " \r\n" +
        "              if (rules[j].selectorText == selector) {" + " \r\n" +
        "                      haveRule = true;" + " \r\n" +
        "                     break outerloop;" + " \r\n" +
        "              }" + " \r\n" +
        "         }//innerloop" + " \r\n" +
        "         " + " \r\n" +
        "     }//outer loop" + " \r\n" +
        "   }//endif" + " \r\n" +
        "   " + " \r\n" +
        "     return haveRule;" + " \r\n" +
        " }//eof" + " \r\n" +

        " function setFading(o, b, e, d, f) {" + " \r\n" +
        " var t = setInterval" + " \r\n" +
        "         (" + " \r\n" +
        "           function () {" + " \r\n" +
        "               b = stepFX(b, e, 2);" + " \r\n" +
        "               setOpacity(o, b / 100);" + " \r\n" +
        "               if (b == e) {" + " \r\n" +
        "                   if (t) { clearInterval(t); t = null; }" + " \r\n" +
        "                   if (typeof f == 'function') { f(); }" + " \r\n" +
        "               }" + " \r\n" +
        "           }" + " \r\n" +
        "         , d / 50);" + " \r\n" +
        " }" + " \r\n" +
        " function setOpacity(e, o) {" + " \r\n" +
        "   // for IE" + " \r\n" +
        "   e.style.filter = 'alpha(opacity=' + o * 100 + ')';" + " \r\n" +
        "   // for others" + " \r\n" +
        "   e.style.opacity = o;" + " \r\n" +
        " }" + " \r\n" +
        " function stepFX(b, e, s) {" + " \r\n" +
        "   return b > e ? b - s > e ? b - s : e : b < e ? b + s < e ? b + s : e : b;" + " \r\n" +
        " }" + " \r\n" +

        " // we may consider adding frames support" + " \r\n" +
        " var w = window;" + " \r\n" +
        " // shortcut to document" + " \r\n" +
        " var d = w.document;" + " \r\n" +
        " // canvas, window width and window height" + " \r\n" +
        " var r = d.documentElement;" + " \r\n" +
        " var ww = w.innerWidth ? w.innerWidth + w.pageXOffset : r.clientWidth + r.scrollLeft;" + " \r\n" +
        " var wh = w.innerHeight ? w.innerHeight + w.pageYOffset : r.clientHeight + r.scrollTop;" + " \r\n" +
        " // create a block element" + " \r\n" +
        " var b = d.createElement('div');" + " \r\n" +
        " b.id = 'Message';" + " \r\n" +
        " b.className = '" + cssclass + "' || '';" + " \r\n" +
        " b.style.cssText = 'top:-9999px;left:-9999px;position:absolute;white-space:nowrap;z-index: 1001;';" +
        " \r\n" +
        " // classname not passed, set defaults" + " \r\n" +
        " if (!verifyStyle(\"." + cssclass + "\")) {" + " \r\n" +
        "   b.style.margin = '0px 0px';" + " \r\n" +
        "   b.style.padding = '8px 8px';" + " \r\n" +
        "   b.style.border = '1px solid #A4BED0';" + " \r\n" +
        "   b.style.backgroundColor = '#E0ECF1';" + " \r\n" +
        " }" + " \r\n" +
        " var bx = d.createElement('div');" + " \r\n" +
        " bx.style.cssText = 'position: absolute;left:0px;top:0px;width:100%;height:100%;text-align:center;z-index: 1000;background-color: " + //va seguido sin salto
        colorfondox + ";opacity:0.5;filter:alpha(opacity=50);'" + " \r\n" +
        " d.body.insertBefore(bx, d.body.firstChild);" + " \r\n" +
        " d.body.insertBefore(b, d.body.firstChild); " + " \r\n" +
        " // write HTML fragment to it  " + " \r\n" +
        " b.innerHTML = '<table><tr><td>" + mensaje + "</td></tr><tr><td align=\"center\">" +

        (string.IsNullOrEmpty(idbotonok)
        ? "<input type=\"submit\" value=\"Aceptar\" onClick=\"disabled=true;setFading(b, 100, 0, 1000, function () { d.body.removeChild(bx); d.body.removeChild(b); });\" >"
        : "<input type=\"submit\" value=\"Aceptar\" onClick=\"__doPostBack(\\'" + idbotonok + "\\',\\'\\')\" id=\"" + idbotonok + "\" >") +

        (botoncancelar
        ? "<input type=\"submit\" value=\"Cancelar\" onClick=\"disabled=true;setFading(b, 100, 0, 1000, function () { d.body.removeChild(bx); d.body.removeChild(b); });\" >"
        : "") +

        "</td></tr></table>';" + " \r\n" +
        " // save width/height before hiding " + " \r\n" +
        " var bw = b.offsetWidth;" + " \r\n" +
        " var bh = b.offsetHeight;" + " \r\n" +
        " // hide, move and then show" + " \r\n" +
        " b.style.display = 'none';" + " \r\n" +
        " b.style.top = (wh / 2 - bh / 2) + 'px'; //center" + " \r\n" +
        " b.style.left = (ww / 2 - bw / 2) + 'px'; //center" + " \r\n" +
        " b.style.display = 'block';" + " \r\n";

    ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(Page), "mensaje", script, true);
}

测试页:

public partial class Test: Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    btnDeleteItem_Click(object sender, EventArgs e)
    {
        //DB checks
        ....
        ....
        //After x checks against Database we see the item has some dependency so we ask for confirmation
        FunctionsLibrary.Mensaje("This Item has x dependency, are you sure you want to delete it?", btnDeleteItemConfirmed_Click, true, "cssclassx", System.Drawing.Color.Gray);
    }

    btnDeleteItemConfirmed_Click(object sender, EventArgs e)
    {
        //delete item definitively, handle dependencies etc...
    }
}

我们无法实现的选项(以防万一我们步入正轨但出现问题):

  • 情况1:(在我们的示例代码中实现的)使用EventHandler + __doPostBack,因此如果您在页面中定义了buttonid_click,它将在回发时调用。 (该事件没有发生...我们认为这是因为我们没有在页面加载中添加 Ok 控件...这给了我们案例 2)

  • 情况2:保存传递的委托函数,注册事件Page.Load+=GetPostBackControlID(),在接下来的页面加载中调用GetPostBackControlID(),检查点击的控件id是否是我们的确定按钮,如果是则调用委托函数


那么您想通过 Javascript 对话框与隐藏代码对话吗?最好的解决方案是使用 Ajax。在这里查看它是如何完成的:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/ http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

请记住,您将在代码隐藏中调用静态方法,因此并非页面中的所有数据都可用。例如,您可以通过 HttpCurrent 对象访问 Session 对象。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET c# 修复函数库内自定义ConfirmMessagebox 的 OK 事件 的相关文章

  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • FormsAuthentication:安全吗?

    Using 表单验证构建成asp net创建一个为经过身份验证的用户创建 cookie 的登录系统非常快速且简单 FormsAuthentication SetAuthCookie uniqueUsername false 与中的一些代码配
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • 在内容 100% 完成之前从 HttpResponseMessage 读取标头

    在整个响应被传回之前 如何访问响应标头 当流到达时如何读取它 HttpClient 是接收 http 响应的精细控制的最佳选择吗 这是一个可以说明我的问题的片段 using var response await httpClient Sen
  • iOS 9 Ionic Cordova 应用程序在 iPhone 上崩溃;适用于 iPad

    Cordova v5 3 1 Ionic v1 1 0 库 v1 6 4 将我们的应用程序从 8 4 升级到 iOS 9 该应用程序在 iPad iPad mini 上构建并运行良好 然而 当部署到 iPhone 时 它 会崩溃 下面是调试
  • 错误:以非位置格式指定的多个替换;您的意思是添加 formatted="false" 属性吗?

    我有一个 Android 应用程序 它在构建过程中抛出以下错误 home Ralf Projekte University android sampleapp sampleapp build intermediates bundles de
  • 如何将 TreeViewItem 放入生成的 TreeViewItem 中?

    C TreeViewItem treeItem null treeItem new TreeViewItem treeItem Header Audit foreach cAuditTransactionTypeEntity tt in P
  • 使用新类别重新训练模型

    我构建了一个包含 2 个类的图像分类器 即 A 和 B 我还使用 model save 保存了这个模型 现在 在一段时间后 出现了添加一个 C 级的要求 是否可以使用 load model 然后仅向之前保存的模型添加一个类 以便我们拥有包含
  • 在 Eclipse 中附加源问题

    在 Eclipse Ganymede 中 我正在调试一些使用 Apache Commons HttpClient 的代码 并希望单步调试 HttpClient 代码 我已经下载了源代码并尝试以正常方式附加它 按住 CTRL 键单击方法名称并
  • 主机密钥验证失败

    我正在尝试通过装有 Cygwin 的 PC ssh 进入我的 UBUNTU 我可以顺利地 WINSCP 但是当我通过命令行 ssh 时 会出现以下错误 WARNING REMOTE HOST IDENTIFICATION HAS CHANG
  • css中的背景颜色不显示

    我的背景颜色有问题 它没有显示 我想要它是红色的 这是代码https jsfiddle net yPX5Q 22 https jsfiddle net yPX5Q 22 0000 更新 问题已解决 但我还有另一个问题 当我调整浏览器大小时
  • 调试适用于 Android 平台的 ionic 应用程序

    我一直在使用离子 我的应用程序使用离子服务工作得很好 然而 一旦我在 android 中启动 apk 它就会出现白色死屏并停留在那里 我可以通过哪些方式调试 Android 平台的 ionic 应用程序 我曾经研究过一些关于调试的知识 并了
  • Linq.Enumerable 中的索引越界

    我在正在处理的服务中间歇性地收到此错误 消息 System IndexOutOfRangeException 索引超出数组范围 在 System Collections Generic List1 Enumerator MoveNext a
  • 为Python编写Sweave

    我最近开始使用Sweave http www stat uni muenchen de leisch Sweave 用于创建使用 R 运行的分析报告 现在我希望对我的 python 脚本执行相同的操作 我找到了参考资料在 Sweave 中嵌
  • 分组算法

    我试图帮助某人编写一个我认为很容易的程序 但当然它从来都不是 我正在尝试制定一个班级名册 通常有 10 20 名学生 并有效地将每个同学与另一个同学有效地唯一配对 以形成独特的小组 因此 一个10人的班级 可以分成9组 它也需要能够处理奇数
  • 来自 java 的 libxml2

    这个问题有点相关用于 Java 中小型 简单文档的最快 XML 解析器 https stackoverflow com questions 530064 fastest xml parser for small simple documen
  • Postgres 生成_系列

    我想要的是对表格进行统计 为此我正在使用generate series 这是我正在做的事情 SELECT x month amount FROM SELECT generate series min date trunc month dat
  • 在 docker 上运行 conda 的 jupyter

    我正在使用 docker 镜像 Continumio anaconda3 并希望通过浏览器使用 conda 启动 jupyter 笔记本服务器 docker run i t p 8888 8888 continuumio anaconda3
  • 在未使用的默认成员初始值设定项中使用仍然是 odr 使用吗?

    即使任何构造函数都没有使用默认成员初始值设定项 在默认成员初始值设定项中使用仍然是 odr 使用吗 例如 这个程序是否格式错误 因为g a 是否使用了 odr 因此其定义被隐式实例化 template a
  • 加密 SQL 数据库中的密码列

    我的数据库名称密码中有一列 我只想在发布到数据库之前对密码进行哈希或加密 我的 php 提交文件中有这样的代码
  • 在 Python 中处理字符串中的转义序列

    有时 当我从文件或用户获取输入时 我会得到一个带有转义序列的字符串 我想处理转义序列与 Python 处理字符串文字中的转义序列的方式相同 https docs python org 3 reference lexical analysis
  • 在 jQuery 中创建新的(永久)CSS 样式

    我想创建一种新样式 而不仅仅是更改元素的样式属性 下面是一些示例代码来演示该问题 Create 1st element var element1 div div text element1 addClass blue body append
  • ASP.NET c# 修复函数库内自定义ConfirmMessagebox 的 OK 事件

    我们创建了一个从 C 通过 javascript 动态显示模态弹出消息的函数 它工作正常 但我们想添加一个参数 以便我们可以传递一个函数委托 或事件处理程序 如果用户按下 确定 按钮 该函数将被调用 有什么建议么 Postdata 我们不需