Javascript确认邮件问题

我有一个弹出确认框,我可以像下面这样显示。

但我不知道用户是否点击了确定或取消。

ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "confirm('Do u wanna change?');", false); 

所以我想做的就是这样。

 if (orignalId != newId) { ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "confirm('Do u wanna change?');", 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; } 

任何建议???谢谢

function:

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

一些额外的代码:

 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 = ""; } } } 

您可以使用隐藏字段,但在用户取消确认框后仍然需要强制回发。 因为无论如何你最终都会调用__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()为了让它为你生成标签)。

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

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

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

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

使用页面中的隐藏字段,并在用户确认后将值设置为true。 然后@服务器端检查你的隐藏字段的值IF如果是,则继续进程如果不使用return或exit sub。

 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", "", false); If (Hidden1.value=="True") { add some data to SQL } else { return; } 

}

我知道已经有一段时间了,因为这个问题已经被问到了,但是我希望能够在任何人仍在寻找一个简洁,简单的答案的情况下加入。 如果您正在寻找客户端javascript弹出窗口来确认(是或否,是或取消等)服务器端function,如删除数据库项目,我发现的最简单的路由是使用您的OnClientClick参数标记中的asp:button或asp:linkbutton:

  

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

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

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

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