Javascript确认邮件问题

时间:2011-02-09 19:43:38

标签: c# javascript asp.net popup confirm

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

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

                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
  2.   

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

4 个答案:

答案 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技巧,但可以让您完全控制。