我有一个弹出确认框,我可以在下面显示。
但我不知道用户是否点击了确定或取消。
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;
}
}
我如何知道用户点击了什么?
我试过这个
Page.ClientScript.RegisterClientScriptInclude(“selective”,ResolveUrl(@“folder1 \ jscrip.js”));
function confirmation()
{
if(confirm("Are you sure?")==true)
return true;
else
return false;
}
任何建议???谢谢
功能:
所以用户点击一个名为“先保存”的按钮然后检查条件“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 = "";
}
}
}
答案 0 :(得分: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管道用于引发回发事件,但这并不意味着我们不能将它们用于我们的优势。
此外,如果发生回发并且UpdatePanel
是事件目标,则上述ASP.NET管道将仅刷新该面板(或更多,取决于其UpdateMode
属性,但这是另一个主题)。因此,我们使用包含我们要刷新的控件的__doPostBack()
的{{1}}和ClientID
的返回值,将UpdatePanel
转换为字符串。
回到服务器端,重新加载页面,我们的代码再次运行。由于您在问题的评论中暗示如果confirm()
和originalId
仍然不同,我们必须再次显示确认框,我认为这次会是相同的({{1}确保)。
传递给newId
的参数可以从else if
和__doPostBack()
请求变量的服务器端访问。首先,我们检查事件目标是否为__EVENTTARGET
,如果是这种情况,我们知道我们正在处理强制回发,__EVENTARGUMENT
的值是有意义的。因此,我们调用Boolean.Parse()从我们之前在客户端生成的字符串反序列化它,并使用它来决定是否更新数据库。
答案 1 :(得分:1)
使用页面中的隐藏字段,并在用户确认后将值设置为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", "<script language='javascript'>confirmDelete();</script>", false);
If (Hidden1.value=="True")
{
add some data to SQL
}
else
{
return;
}
}
答案 2 :(得分:0)
我知道已经有一段时间了,因为这个问题已被提出,但是我想要插手,以防任何人仍然在寻找一个简洁,简单的答案。如果您正在寻找客户端javascript弹出窗口来确认(是或否,是或取消等)服务器端功能,例如删除数据库项目,我发现的最简单路线是使用asp:按钮中的OnClientClick参数或标记中的asp:linkbutton:
<asp:LinkButton Text="Delete" ID="DeleteProj" runat="server" CommandName="deleteproj" OnClientClick="return confirm('Are you sure?');" CommandArgument='<%# Eval("ProjectID") %>'/>
单击否将用户返回到您的页面,单击是将运行您为其设置的任何C#代码隐藏。这对我有用。
答案 3 :(得分:0)
ScriptManager.RegisterStartupScript经常会阻止弹出窗口。如果您尝试使用以下链接中的方法,您将在弹出窗口中完全控制每次单击。
http://02e34b5.netsolhost.com/youtube/Zpopup.aspx
此弹出窗口不需要任何ajax,javascript,jquery或css技巧,但可以让您完全控制。