Ajax已启用server.transfer上的更新进度条

时间:2012-03-27 16:09:53

标签: c# asp.net progress-bar

我有一个网页,我在其上应用了Ajax启用了更新进度条的提交按钮。 在此提交按钮中单击我正在执行一些数据库操作,如果操作是 成功然后页面是server.transfer到另一个页面。

我的问题是我必须在此提交按钮和页面上实现进度条 应该重定向到另一个页面。但我得到page request manager exception on server .transfer。 由于某些安全功能,我无法使用response.redirect,请给我 解决方案或解决方法以避免页面请求管理器异常。

2 个答案:

答案 0 :(得分:0)

根据我上面的评论,您无法在AJAX回发中更改页面。相反,您必须等待AJAX​​请求完成,您可以向其发送数据库选项的成功/失败结果。只使用ScriptManager公开的客户端API,您就可以使用以下脚本:

<script type="text/javascript">
<!--
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequest);
function EndRequest(sender, args) {
    // TODO: Validate args indicates success.
    var isSuccess = true;
    if (isSuccess)
        window.location = "SecondPage.aspx";
}
// -->
</script>

将此脚本直接放在ScriptManager声明之后,根据您的需要进行修改以验证成功并直接转到正确的页面。

答案 1 :(得分:0)

感谢您的回复,您提出了一个很好的建议,我也找到了一个解决方案,我想分享这个问题,它对我来说很好。因为我的问题是维护隐藏的变量和server.transfer所以我把这样的代码。 我在更新面板中放置了2个按钮,在更新面板外放置了另一个按钮,因此当内部更新面板按钮的点击事件将触发时,它将执行数据库操作和 成功进行数据库操作后,它将从服务器端调用java脚本函数,如此

protected void btnProceed_Click(object sender, EventArgs e)
    {
     //do your db operations
     //After successful operations call java script

      ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "displayNote","   <script language='JavaScript'>onAsyncPostclick();</script>", false);

}

Java脚本代码

<script type="text/javascript" language="javascript">
//ToDo: Used to call button on which we fire server.transfer
      function onAsyncPostclick() {
      var btnName = $get("<%=btnPostBack.ClientID%>").name;
      __doPostBack(btnName, "");
    }
</script>

在这个JavaScript代码中,我已将回拨调用放在更新面板之外的另一个按钮上,并且在该按钮的点击事件中,我正在触发服务器。转移到这样的新页面

    //Implemented for button Submit (outside of Update panel) click
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Server.Transfer("NewPage.aspx");
    }

通过上面的方式,我可以在启用了ajax的回发点击上调用server.transfer,我从页面请求管理器异常中保存了我的代码。我认为这是解决问题的方法,但它可以满足我的要求。