【问题标题】:Ajax Enabled update progress bar on server.transferserver.transfer 上启用 Ajax 的更新进度条
【发布时间】:2012-03-27 16:09:52
【问题描述】:

我有一个网页,我正在应用Ajax 在提交按钮上启用更新进度条。 在这个提交按钮中单击我正在做一些数据库操作,如果操作是 成功则页面是服务器。转移到另一个页面。

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

【问题讨论】:

  • 您正在 AJAX(UpdatePanel 或某些此类)请求中尝试 Server.Transfer?
  • 是的,我正在 AJAX (UpdatePanel) 中尝试 Server.Transfer。是否有任何替代方法可以在 AJAX (UpdatePanel) 中执行 Server.Transfer,因为每次我收到页面请求管理器异常时,由于呈现另一个页面 html 标记。
  • 您不能在 AJAX 回发中传输/重定向页面。 AJAX 只希望标记替换动态控件,而不是整个页面,因此您的模型将无法工作。尝试用 jQuery 脚本替换 UpdatePanel 回发,例如 the answer to this question

标签: c# asp.net progress-bar


【解决方案1】:

根据我上面的评论,您不能在 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 声明之后,根据您的需要进行修改以验证成功并指向正确的页面。

【讨论】:

    【解决方案2】:

    感谢您的回复,您提出了一个很好的建议,我也找到了解决这个问题的方法,我想分享,它对我来说很好。因为我的问题是维护隐藏变量和服务器。传输所以我把我的代码是这样的。 我已将 2 个按钮放在更新面板内,另一个放在更新面板外,因此当在更新面板内按钮的点击事件将触发时,它将执行数据库操作和 成功的 db 操作后,它将像这样从服务器端调用 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,并且我从页面请求管理器异常中保存了我的代码。我认为它可以解决这个问题,但它可以很好地满足我的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2012-12-08
      • 2012-09-27
      • 2013-03-08
      • 2016-11-11
      • 2020-11-05
      • 2010-10-22
      相关资源
      最近更新 更多