2

我正在使用客户端脚本来确认消息框,如下所示

 string script = "fadeScript";
                ScriptManager.RegisterClientScriptBlock(this.Page, script.GetType(), "Script", "Closewindow();", true);

java脚本函数:

<script type="text/javascript">
    function Closewindow() {
        var Result = confirm("Are you sure want to delete?");
        alert(Result);
        if (Result == true) {
            document.getElementById('txtConfirmresult').value = Result;//assigning to hidden text box 
            alert(txtConfirmresult.value);
        return true;
        }
    else 
    {
        document.getElementById('txtConfirmresult').value = Result;//assigning to hidden text box 
        alert('BYE');
         return false;
        }
}

</script>

如果它返回true,我想使用.cs文件中的脚本返回值来激发程序。如果它返回 false 我必须只停留在该特定页面上。请帮我解决这个问题

4

1 回答 1

2

您可以使用__doPostBack(target, argument)回发到服务器。然后,您可以评估__EVENTTARGET__EVENTARGUMENT在发布数据中查看您发回的内容并适当地执行逻辑。 这是一个提供更深入信息的链接

一个简单的例子:

脚本/客户端:

<script type="text/javascript">
    function Closewindow() {
        var Result = confirm("Are you sure want to delete?");
        alert(Result);
        if (Result == true) {
            var txtConfirmResult = document.getElementById('txtConfirmresult');
            txtConfirmResult.value = Result;//assigning to hidden text box 
            alert(txtConfirmresult.value); //displaying for debug purposes
            __doPostBack( 'txtConfirmresult', Result ); //sending back to server.
        return true;
        }
    else 
    {
        document.getElementById('txtConfirmresult').value = Result;//assigning to hidden text box 
        alert('BYE');
         return false;
        }
}

C#

    protected void Page_Load(object sender, EventArgs e)
    {
        string target =  Request["__EVENTTARGET"];
        string argument = Request["__EVENTARGUMENT"];

        if (target != null && target.Equals( "txtConfirmresult" ) )
        {
             this.DoSomeGreatServerSideProcessing(argument);
        }
    }

更新以添加更正确的变量名称,但假设您的脚本正在运行,则应该与您现有的代码库一起使用。我会非常小心地使用您的 ID,因为只有在文本框上没有设置txtConfirmresult它才会起作用。runat="server"如果是这种情况,ID 将被添加到表示容器层次结构的前面。

我建议很好地命名您的“回调”,例如:

脚本/客户端:

<script type="text/javascript">
    function Closewindow() {
        var Result = confirm("Are you sure want to delete?");
        document.getElementById('txtConfirmresult').value = Result;//assigning to hidden text box 
        if (Result) {

            __doPostBack( 'UserConfirmedFormSubmission', "CloseWindow" ); //sending back to server.
            return true;
        }
        else 
        { 
           return false;
        }
}

C#

    protected void Page_Load(object sender, EventArgs e)
    {
        string target = Request["__EVENTTARGET"];
        string argument = Request["__EVENTARGUMENT"];

        if (!string.IsNullOrEmpty(target) && target.Equals("UserConfirmedFormSubmission"))
        {
             if ( !string.IsNullOrEmpty(argument) && argument.equals("CloseWindow"))
             {
                this.HandleUserRequestedCloseWinow();
             }
        }
    }
于 2012-08-02T14:42:20.670 回答