3

我有一个弹出确认框,我可以显示如下。

但我不知道用户是单击确定还是取消。

                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

所以我想做的就是这样。

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

If (user clicks Yes)
{
add some data to SQL
}
else
{
return;
}
}

我怎么知道用户点击了什么?

我试过这个

  1. 我将下面的代码放在 folder1\jscrip.js 文件中,但我不知道如何调用它,因为我在页面中有一个使用过的 ajax 更新面板,所以我不能使用 ClientScript.RegisterClientScriptInclude 来引用它。如本链接第 6 点所述:http: //www.dotnetcurry.com/ShowArticle.aspx?ID=274

Page.ClientScript.RegisterClientScriptInclude("selective", ResolveUrl(@"folder1\jscrip.js"));

function confirmation()
{
if(confirm("Are you sure?")==true)
return true;
else
return false;
}

有什么建议吗???谢谢

功能:

所以用户点击一个名为“首先保存”的按钮,然后它检查条件“if(orignalId!= newId)”如果它是真的,则显示确认框,否则不显示确认框..现在如果用户点击好的,在数据​​库中输入了一些值,否则它只是返回并且什么都不做

一些额外的代码:

protected void Page_Load(object sender, EventArgs e)
        {
if (!IsPostBack)
            {
            }
 else if (Label.Text != "")
            {
                Global.logger.Debug("Postback Happ, Label = " + Label.Text);
                Button2_Click(sender, e);
            }
        }

 protected void Button2_Click(object sender, EventArgs e)
        { if (orignalCsId != 0 && newCsId != 0)
                {
                    if (orignalId != newId)
                    {
                        Global.logger.Debug("Pop Up crossed1");
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", String.Format(CultureInfo.InvariantCulture, @"__doPostback('{0}', confirm('Your Data From iD1 will be populated in iD2?').toString());", Label.Text), true);
                    }
                    else if (Page.Request["__EVENTTARGET"] == Label.Text)
                    {
                        Global.logger.Debug("__EVENTARGUMENT1 = " + Page.Request["__EVENTARGUMENT"]);
                        bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
                        if (userClickedOK)
                        {
                            // Add some data to SQL.
                        }
                        else
                        {
                            return;
                        }
                        Label.Text = "";
                    }
                }
          }
4

4 回答 4

3

您可以使用隐藏字段,但在用户关闭确认框后仍需强制回发。由于无论如何您最终都会调用__doPostBack(),因此您可以利用它的第二个参数将返回值confirm()发送回服务器,而无需使用隐藏字段:

if (originalId != newId) {
    ScriptManager.RegisterStartupScript(this, GetType(), "ajax",
        String.Format(CultureInfo.InvariantCulture, @"
            __doPostBack('{0}', confirm('Are you sure?').toString());
        ", yourUpdatePanel.ClientID), true);
} else if (Page.Request["__EVENTTARGET"] == yourUpdatePanel.ClientID) {
    bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
    if (userClickedOK) {
        // Add some data to SQL.
    } else {
        return;
    }
}

首先,我们比较两个id。如果它们不同,我们需要在客户端显示一个确认框并将其结果发送回服务器,因此我们包含一个启动脚本来执行此操作(请注意,您可以按顺序true将最后一个参数传递给RegisterStartupScript()让它为你生成<script>标签)。

然后,在客户端,我们需要__doPostBack()在阻塞调用返回后调用强制回发confirm()__doPostBack()接受两个参数:ClientID启动回发的控件(事件目标)和一个可选的事件参数。内部 ASP.NET 管道使用它们来引发回发事件,但这并不意味着我们不能利用它们来发挥我们的优势。

此外,如果回发发生并且 anUpdatePanel是事件目标,则上述 ASP.NET 管道将仅刷新该面板(或更多,取决于它们的UpdateMode属性,但这是另一个主题)。所以我们调用__doPostBack()包含我们要刷新的控件的,并将返回值ClientID转换为字符串。UpdatePanelconfirm()

回到服务器端,页面重新加载,我们的代码再次运行。由于您在问题的评论中暗示如果originalId并且newId仍然不同,我们将不得不再次显示确认框,我认为这次它们将是相同的(else if确保)。

传递给的参数可从和请求变量__doPostBack()在服务器端访问。所以首先,我们检查事件目标是否是我们的,如果是这样,我们知道我们正在处理一个强制回发,并且值是有意义的。所以我们调用Boolean.Parse()从我们之前在客户端生成的字符串反序列化它,并用它来决定是否更新数据库。__EVENTTARGET__EVENTARGUMENTUpdatePanel__EVENTARGUMENT

于 2011-02-09T20:26:00.773 回答
1

使用页面中的隐藏字段,并在用户确认或不确认后将值设置为 true 或 false。然后@服务器端检查隐藏字段的值如果是真的继续该过程如果不使用返回或退出子。

function confirmDelete()
{

    var x = confirm("Are you sure you want to Delete?");
    if (x)
    { 
        document.getElementById('Hidden1').value = "True";
    }
    else
    {
        document.getElementById('Hidden1').value = "False";
    }
}

服务器端

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirmDelete();</script>", false);

If (Hidden1.value=="True")
{
add some data to SQL
}
else
{
return;
}

}

于 2011-02-09T20:07:34.463 回答
0

ScriptManager.RegisterStartupScript 通常会阻止弹出窗口。如果您尝试以下链接中的方法,您将在弹出窗口中完全控制每次单击。

http://02e34b5.netsolhost.com/youtube/Zpopup.aspx

这个弹出窗口不需要任何 ajax、javascript、jquery 或 css 技巧,但可以让您完全控制。

于 2014-08-27T00:52:14.620 回答
0

我知道这个问题被问到已经有一段时间了,但我想插话,以防有人仍在寻找简洁、简单的答案。如果您正在寻找客户端 javascript 弹出窗口来确认(是或否,是或取消等)服务器端功能,例如删除数据库项目,我发现的最简单的方法是使用 OnClientClick 参数在您的标记中的 asp:button 或 asp:linkbutton :

<asp:LinkButton Text="Delete" ID="DeleteProj" runat="server" CommandName="deleteproj" OnClientClick="return confirm('Are you sure?');" CommandArgument='<%# Eval("ProjectID") %>'/> 

单击 no 会将用户返回到您的页面,单击 yes 将运行您为其设置的任何 C# 代码隐藏。这对我有用。

于 2014-08-22T15:13:53.560 回答