0

更新パネル内のボタン クリック イベントで、ユーザーから yes,no 値を返す 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 関数はクライアント側で実行され、サーバー側でユーザーの選択を取得するには、フォーム送信 (同期または非同期は関係ありません) が必要になります。したがって、2 つの要求が必要です。最初に、ユーザーの選択を確認するスクリプトを登録し、その後、ユーザーの選択をサーバーに送信するように要求します。

于 2013-01-07T12:28:19.817 に答える