如果某些条件为真,我想在按钮点击时在ASP.net中显示带有“是”和“否”按钮的消息

时间:2011-03-28 06:45:22

标签: javascript asp.net

当代码隐藏中的某些条件变为真时,我想显示带有“是”和“否”按钮的消息。如果用户单击“是”,则一段代码将执行其他方式,但不会。

例如:

button_click()
{
  if(condition== true)
  {
   popup a msg with yes and no
   if(user click 'yes')
   {
     then some code...
    }
  }
}

2 个答案:

答案 0 :(得分:0)

将此行添加到您的代码中:

button.OnClientClick = "if (!confirm('Do you want to ...')) return false;";

答案 1 :(得分:0)

虽然其他答案对于如何在Javascript中进行对话是正确的,但他说当代码隐藏中的某些条件成为现实然后运行一些代码(可能也在服务器上)。问题似乎不是确认功能,而是如何有条件地运行它。

如果你的应用程序的控制来自服务器端,那将会有点难看。也就是说,为了在两个基于服务器的操作中进行客户端交互,您必须有两次往返服务器。更好的方法是使用AJAX来从服务器获取条件的客户端源操作,但是这是你可以做到的:

override void OnLoad(EventArgs e)
    {
        if (SomeCondition) {
           // cause a dialog to be displayed when page is loaded

            string confirm = @"if (confirm('Are you sure you want to continue?')) {
               __doPostBack('','1');
            }";
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), 
                Guid.NewGuid().ToString(), confirm ,true);
        }

        // check for a javascript initiated postback
        string args = Request.Form["__EVENTARGUMENT"];
        if (!String.IsNullOrEmpty(args)) {
            if (args=='1') {
                DoSomethingOnConfirm();
            }
        }
    }

基本上,你在这里做两件事:

1)如果SomeCondition为真(可能是用户发布的帖子),则注册一个脚本,该脚本将在页面加载完成后运行。该脚本会导致确认,如果为true,则会使页面再次回发给自己。

2)在第二次回发时,__EVENTARGUMENT(由__doPostback的第二个参数设置)将设置为1,这意味着用户点击了确定。

如果他们不确认,您需要添加其他内容,具体取决于您想要发生的事情。也许你想用不同的论点再次发布页面。

无论如何 - 这真的是一个糟糕的模型,我不推荐它。如果您需要基于服务器上的某些东西进行客户端交互,而这些东西在他们单击按钮时您不知道,那么您应该使用ajax。因此,即使我认为这不是一个坏主意,这些技术对其他合法用途也很有用。