0

我正在调用一个 javascript 函数以在更新面板内的按钮单击事件中返回来自用户的是、否值。我想根据用户操作(是/否)调用某些服务器端功能。我的javascript代码如下

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

我在我的服务器端按钮单击中调用它,如下所示。

 if ((Convert.ToInt32(_dsLeaveDetails.Tables[0].Rows[0][0]) == 1) 
            {

                ShowAlert("Leave is already marked for this date");
                return;

            }
            else if ((Convert.ToInt32(_dsAttendanceDetails.Tables[0].Rows[0][0]) >= 1)) 
            {

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


                return;
            }

问题是,仅在代码完全执行后才会显示弹出窗口,因此无法进一步处理用户操作(是/否)。我也不能在 clientclick 事件上调用 javascript 函数,因为我不需要弹出窗口。只有在检查数据集 dsAttendanceDetails 之后,我才需要弹出窗口。请帮忙。

4

1 回答 1

0

您似乎假设该行ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "Confirm();", true);会立即执行 java-script 函数 - 但这根本不可能。当响应到达客户端时,即当后续服务器代码已经执行时,此调用将执行 JS 函数。

java-script 函数将在客户端执行,您将需要表单提交(同步或异步无关紧要)以在服务器端检索用户的选择。因此,您需要两个请求 - 首先将注册确认用户选择的脚本,然后注册将用户选择发送到服务器的后续请求。

于 2013-01-07T12:28:19.817 回答