c# - 确认消息框

标签 c# asp.net visual-studio

我有一个保存按钮,单击该按钮应在数据库中进行一些更改。

if (bFound== false)
{
   // Giving the warning message
   // If user presses cancel then abort

   // Prepare the list of dbId needs to be deleted
   deletedBSIds.Add(dbId);
}

这里如果 bFound字段为真则不应执行上述语句,但如果为假则应进入条件,然后询问用户是否要保存更改"is"或“否”。

如果用户说是,它应该转到命令“deletedBSIds.Add(dbId);”并继续执行,但如果用户按下否,它应该基本上中止并且什么都不做。

有没有办法做到这一点?
任何帮助,将不胜感激。

这是一个服务器端事件。所以我认为不能在我的按钮中添加点击事件/..

此处仅当 bFoung 字段为 false 时才会弹出消息框。否则它根本不会弹出。

如果你觉得我错了,请纠正我..

谢谢

最佳答案

您需要将以下内容添加到按钮中:

button.OnClientClick = "return ConfirmThis();";

然后,您需要将 ConfirmThis 函数添加到页面:
Page.ClientScript.RegisterScriptBlock(GetType(), "ConfirmThis", 
    @"function ConfirmThis() {
         if(condition) { //where condition checks the bfound element.
             return confirm(""Are you sure you want to delete this?"");
         }
         return true;
      }");

使用这种方法,您将想要尝试并能够在 javascript 中测试客户端的 bfound 条件。如果 bfound值存储在 textbox 中或 HiddenField您应该使用 document.getElementById功能。如果 bfound创建页面时值是已知的,您可以将其注入(inject) ConfirmThis直接函数,将其传递到 ConfirmThis函数作为参数。

根据您的编辑进行编辑:

尝试从用户那里获得确认时,您有两种选择:
  • 使用已经发送到浏览器的客户端逻辑来执行确认。这是我上面给出的例子。
  • “其他”选项是使用模式对话框或使用确认框将页面发回。然后,您将在对服务器的全新回发中获得用户的确认。因此,您需要重新考虑您的逻辑,以便能够临时存储第一个回帖中的信息,并等待第二个回帖完成所需的操作。

  • 在这两个示例中,第一个选项更简洁,不需要临时内存,并且为用户节省了额外的回发。

    因为这两个选项都将要求您重新编写要求确认的逻辑,所以如果可能的话,我会尝试转换条件所需的逻辑以显示确认对话框,以便能够使用 javascript 在客户端计算机上执行。

    有什么方法可以预先计算 bfound 变量,或者至少发送足够的信息以便在客户端计算它?

    如果在我恳求之后您仍然想使用选项 2:

    使用以下代码(基于 http://www.dotnetspider.com/resources/1521-How-call-Postback-from-Javascript.aspx :
    if(bfound)
    {
        //save all the information you need in temporary information
        ViewState["InformationINeedToFinishAfterPostback"] = ImportantInformation;
    
        Page.ClientScript.RegisterScriptBlock(GetType(), "postbackmethod", Page.ClientScript.GetPostBackEventReference(this, "MyCustomArgument"));
        Page.ClientScript.RegisterStartupScript(GetType(), "startupconfirm", 
            @"if(confirm(""are you sure?"") {
                  __doPostBack('__Page', 'MyCustomArgument');
              }");
    }
    

    现在要处理回发,请将以下代码添加到您的 page_load:
    if(Request("__EVENTARGUMENT") == "MyCustomArgument")
    {
        ImportantInformation = (CastToAppropriateType)ViewState["InformationINeedToFinishAfterPostback"];
        //finalize the desired action here.
    }
    

    但是... 我仍然会推荐第一个选项。但是现在您拥有了这两个选项所需的代码。另外,我没有测试这段代码,所以你肯定会遇到语法问题,但它会让你走上正轨。

    关于c# - 确认消息框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603359/

    相关文章:

    visual-studio - 用于在 Visual Studio 中添加现有项目链接的快捷键

    c# - 获取快照会减慢 UI - 需要线程吗?

    c# - Resharper陷阱

    C#/.NET : Reporting subprocess state to the parent service

    c# - XML 序列化期间缺少 SecurityProtocolType.Ssl3 枚举值

    c# - 如何从整数值中获取月份名称?

    javascript - 使用 Jquery 和 ASP.NET 的 Ajax 问题

    asp.net - asp.net 应用程序中的 paypal ipn 集成

    android - Visual Studio Cordova 混合应用程序 "release"与 "distribution"

    asp.net - 如何访问Visual Studio 2015中的ASP配置工具