使用Javascript弹出回发问题

时间:2016-08-23 18:16:08

标签: javascript c# asp.net

我知道有很多类似的问题,但我没有看到任何相同的问题。我有一个ASPX页面并使用javascript来显示确认弹出窗口。单击按钮时,不会使用我单击的值,而是使用之前的值。所以如果我第一次取消就点击OK。如果我再次单击“确定”,则转到“确定”,如果单击“取消”,则它仍然转到“确定”,我再次单击“取消”,然后取消。我确定这是Postback的一个问题,但我不知道如何解决它,因为我没有在点击按钮上调用javascript,但稍后。我使用我的代码来确定记录是否重复,如果是,我会显示让用户知道的弹出窗口,并为他们提供接受或取消的选项。如果没有重复,则不会调用弹出窗口的脚本。那么我该如何解决这个问题呢?

我的ASPX中的Javascript

function Confirm() {
    var confirm_value = document.createElement("INPUT");
    confirm_value.type = "hidden";
    confirm_value.name = "confirm_value";
    if (confirm("Duplicate Record. Do you want to save?")) {
        confirm_value.value = "Yes";
    } else {
        confirm_value.value = "No";
    }
    document.forms[0].appendChild(confirm_value);
}

这是来自我的CS的代码,在测试条件后从一个方法调用。

ScriptManager.RegisterStartupScript(this, base.GetType(), "confirmation", "Confirm();", true);
string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "Yes")
{
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
}
else
{
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
}

注意:我对同一页面上的几个字段使用AutoPostBack作为数据输入表单,并且取决于为一个字段选择的内容取决于将如何填充另一个字段。

1 个答案:

答案 0 :(得分:0)

这是一种方法。

在标记中,您可以添加隐藏字段以监控是否必须覆盖重复数据。在下面的示例中,btnSaveData是表单中可能已存在的按钮。

<asp:HiddenField ID="hiddenOverwriteData" runat="server" Value="false" />
<asp:Button ID="btnSaveData" runat="server" Text="Save data" OnClick="btnSaveData_OnClick" />

按钮单击的事件处理程序应检查数据是否已存在。如果是,则注册客户端脚本;如果没有,则保存新数据。

protected void btnSaveData_OnClick(object sender, EventArgs e)
{
    // Check if the data record already exists
    bool isDuplicate = ...

    if (isDuplicate)
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "ConfirmSave", "confirmSaveData();", true);
    }
    else
    {
        DoSaveData();
    }
}

private void DoSaveData()
{
    // Actually save the data
    ...
}

Javascript函数要求确认。如果用户确认,则隐藏字段的值设置为true并再次提交表单;如果没有,则取消保存操作。

<script type="text/javascript">
    function confirmSaveData() {
        if (confirm("Duplicate data. Do you want to overwrite?")) {
            var hiddenOverwriteData = document.getElementById('<%= hiddenOverwriteData.ClientID %>');
            hiddenOverwriteData.value = 'true';
            form1.submit();
        }
    }
</script>

Page_Load中,我们检查用户是否刚刚确认应该覆盖重复数据,在这种情况下保存数据并重置隐藏字段值。

protected void Page_Load(object sender, EventArgs e)
{
    if (hiddenOverwriteData.Value == "true")
    {
        hiddenOverwriteData.Value = "false";
        DoSaveData();
    }
}