在服务器站点ASP.NET中创建对话框确认

在服务器站点ASP.NET中创建对话框确认,asp.net,dialog,confirm,Asp.net,Dialog,Confirm,我想在ASP.NET中创建一个对话框 我正在使用以下代码执行此操作: protected void Button1_Click(object sender, EventArgs e) { ClientScriptManager CSM = Page.ClientScript; string strconfirm = "<script>if(!window.confirm('Are you sure?')){window.location.href=

我想在ASP.NET中创建一个对话框

我正在使用以下代码执行此操作:

protected void Button1_Click(object sender, EventArgs e)
{
    ClientScriptManager CSM = Page.ClientScript;
    
    string strconfirm = "<script>if(!window.confirm('Are you sure?')){window.location.href='Default.aspx'}</script>";
    CSM.RegisterClientScriptBlock(this.GetType(), "Confirm", strconfirm, false);
        
    if (the condition to yes clicked)
    {
        // do something ....
    }
    else 
    {
        // do something else ....
    }
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
ClientScriptManager CSM=Page.ClientScript;
string strconfirm=“如果(!window.confirm('you sure?'){window.location.href='Default.aspx'}”;
RegisterClientScriptBlock(this.GetType(),“Confirm”,strconfirm,false);
如果(单击“是”的条件)
{
//做点什么。。。。
}
其他的
{
//做点别的。。。。
}
}
在这种情况下,如何获得是/否条件


谢谢你阅读我的帖子,你不能这样做。您的代码隐藏从不与用户交互。您的代码隐藏只与网页交互,并且只在网页往返时进行交互

在回邮之前?您有以下设置:

您没有以下内容:

你也没有这个:

因此,当用户单击一个按钮时,这会发生在客户端。页面-整个网页被发送到服务器-然后你的代码与网页交互-而不是用户

所以,你点击一个按钮-(浏览器)。然后页面开始所有重要的往返。像这样:

页面将向上移动到服务器

你现在有了这个:

偶尔会运行代码隐藏。完成后,您的代码隐藏必须完成,否则页面将在服务器端保持竖起状态。完成后,整个页面将返回浏览器。然后重新显示页面,然后任何js代码都可以运行

那么什么时候完成?您的页面将返回浏览器,如下所示:

ClientScriptManager CSM = Page.ClientScript;

    string strconfirm = "<script>if(!window.confirm('Are you sure?')){window.location.href='Default.aspx'}</script>";
    CSM.RegisterClientScriptBlock(this.GetType(), "Confirm", strconfirm, false);

 Function OkCode - runs on user click or seleciton.


 Function Cancel Code - runs on user click of cancel button.

而且只有在页面完成该行程后,浏览器才能显示您的代码所做的更改。因此,您的代码从不与用户交互,但实际上只能与网页交互,并且只能在网页在服务器上运行的很短时间内进行交互

那么,你如何弹出一个对话框,并得到一个是/否的答案?您需要运行对话框并启动客户端。根据用户点击ok或cancel,您可以运行代码存根

所以你可以说有这样的代码:

ClientScriptManager CSM = Page.ClientScript;

    string strconfirm = "<script>if(!window.confirm('Are you sure?')){window.location.href='Default.aspx'}</script>";
    CSM.RegisterClientScriptBlock(this.GetType(), "Confirm", strconfirm, false);

 Function OkCode - runs on user click or seleciton.


 Function Cancel Code - runs on user click of cancel button.
ClientScriptManager CSM=Page.ClientScript;
string strconfirm=“如果(!window.confirm('you sure?'){window.location.href='Default.aspx'}”;
RegisterClientScriptBlock(this.GetType(),“Confirm”,strconfirm,false);
函数OkCode-在用户单击或选择时运行。
功能取消代码-在用户单击取消按钮时运行。
因此,您需要3个代码存根。一个是注入将弹出对话框的脚本。然后,该脚本/对话框中的ok或cancel按钮可以再次启动服务器端代码。这当然需要往返(就像所有服务器端按钮事件代码一样)

有一些捷径。假设我有一个标准的asp.net按钮,我想要一个确认对话框?你可以这样做:

        <asp:Button ID="Button1" runat="server" Text="Delete"
            OnClientClick="return confirm('Delete record');"/>

上述方法是有效的,因为js中的confrim返回true或false,这将阻止按钮代码(服务器端后面的代码)运行

当然,您可以有一个从代码隐藏处调用的脚本。请记住,您的注册脚本必须是最后一件事,并在它返回到客户端之前注入到该页面中。页面显示,然后您添加的脚本将运行

你可以说你的表单上有两个按钮——隐藏它们。然后有一个js对话框,根据您传递的内容单击任意一个按钮

所以,假设我们构建这个函数。我们将向其传递问题/文本,然后说两个按钮(一个用于确定单击,一个用于取消单击)。您可以将这些按钮的样式设置为display:none。如果该对话框产生结果,则仍然无法获得服务器端。因此,在几乎所有情况下,您都必须将代码分解为3个独立的部分

触发对话框的部分

以及根据用户的选择运行代码隐藏存根的两个按钮。换句话说,通过脚本添加对话框仍然需要两个单独的代码存根才能运行(一个用于ok,另一个用于cancel)。您无法在服务器端弹出对话框并等待。在上述往返概念中,这将导致网页被挂在服务器上。往返对话必须被你的头脑所吸收——如果没有往返工作的模型,那么你在设计假设中就会犯错误——因此你的问题实际上是不可能实现的

您可以创建一个通用对话框,将文本设置为代码隐藏以及注册脚本的想法。但是按钮选择和它运行的代码也必须在注册脚本中设置,并且您仍然需要两个单独的存根后面的代码(一个用于取消,一个用于确定)。因此,可以设置一些要求您在每个页面中不包含特殊代码的内容,但您需要构建一个js函数例程,您必须向它提供两个代码存根的名称,然后js例程可以发送一个_DoPostBack,传递所做的选择

但是,请再次注意,您需要单独的例程,因为该网页位于用户桌面上,您的代码不是等待对话框,而是等待整个页面的回发

所以请记住,代码隐藏不会与用户交互——它只会与网页交互,而且只会在短暂的往返过程中进行交互,事实上,只会在网页在服务器上运行时进行交互,并且代码隐藏会运行并完成。然后网页开始返回客户端-重新加载页面,显示您所做的更改,然后该页面中的js再次开始运行