确认消息框

时间:2009-10-21 20:21:59

标签: 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字段为true,则不应执行上述语句,但如果为false,则应该进入该条件,然后询问用户是否要保存更改“是”或“否”

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

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

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

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

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

感谢

4 个答案:

答案 0 :(得分:6)

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

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

然后,您需要将ConfirmThis函数添加到Page:

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值存储在textboxHiddenField中,则应使用document.getElementById函数。如果在创建页面时已知bfound值,则可以直接将其注入ConfirmThis函数,并将其作为参数传递给ConfirmThis函数。

编辑以响应您的修改:

尝试从用户那里获得确认时,您有两个选择:

  1. 使用已发送到浏览器的客户端逻辑执行确认。这是我上面给出的例子。
  2. “其他”选项是使用模式对话框或使用确认框发回页面。然后,您将以全新的回发方式将用户的确认信息返回给服务器。因此,您需要重新考虑您的逻辑,以便能够暂时存储第一篇文章中的信息并等待第二篇文章返回以完成所需的操作。
  3. 在这两个示例中,第一个选项是更清晰,不需要临时内存,并为用户节省了额外的回发。

    因为这两个选项都要求你重新修改要求确认的逻辑,如果可能,我会尝试转换条件所需的逻辑,以显示确认对话框,以便能够在客户端的计算机上执行用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.
    }
    

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

答案 1 :(得分:3)

我不确定bfound应该代表什么,但是你不能通过某些服务器代码执行1/2方式然后返回到客户端 - ASP.NET不会那样工作。

通常,您将使用某些客户端JavaScript进行确认。谷歌ASP.NET是/否确认找到许多不同的方法来做到这一点...

完成此操作后,您可以有条件地执行服务器端代码。

答案 2 :(得分:1)

您可以使用Javascript confirm()功能向用户显示一个对话框,并显示“确定”和“取消”提示。然后,您可以将用户的选择存储在隐藏字段中并触发回发。这个article解释了如何使用ASP.NET将Javascript代码呈现给客户端。

答案 3 :(得分:0)

由于您使用的是ASP.NET,因此可以向按钮添加属性:

 btnDelete.Attributes.Add("onclick", "return confirm('Are you sure?');");

btnDelete是你的按钮。