【问题标题】:Forcing a postback强制回发
【发布时间】:2012-01-02 20:12:02
【问题描述】:

有没有办法在代码中强制回发?

我希望强制从我的 asp.net Web 应用程序后面的 c# 代码中的方法引发回发。

【问题讨论】:

  • 您能否说得更具体一些 - 并告诉我们您到目前为止尝试了哪些方法?
  • 嗯,回发是从客户端(浏览器)到服务器。所以 C# 代码(在服务器上运行)不能这样做。
  • 我认为您的问题与here提出的问题相似
  • @Richard Ev 我希望将 UserControls 动态添加到 Web 应用程序中。单击按钮将增加控件的数量,但新控件将不会显示,直到Page_Load 方法在回发时触发(在单击下一个按钮之后)。所以我需要在增加控件数量的方法结束时强制回发。

标签: c# asp.net postback


【解决方案1】:

您可以尝试重定向到同一页面。

Response.Redirect(Request.RawUrl);

【讨论】:

  • 但是表单值丢失了……
  • @Protectorone 不会,除非您先查看它们并在 Page_Load() 中的后续回发中重新加载它们
【解决方案2】:

表单提交后会触发回发,因此它与客户端操作有关... 看看这里的解释: ASP.NET - Is it possible to trigger a postback from server code?

这里有一个解决方案: http://forums.asp.net/t/928411.aspx/1

【讨论】:

  • 对于那些使用 .NET 较新版本的用户,您必须使用 Page.ClientScript.GetPostBackEventReference,因为 'this.GetPostBackEventReference(...)' 已过时。也可能是Page.ClientScript.RegisterStartupScript(...)
【解决方案3】:

更简单:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack(sender, e)", true);

【讨论】:

    【解决方案4】:

    mamoo 提到的http://forums.asp.net/t/928411.aspx/1 的解决方案 - 以防万一网站离线。对我来说效果很好。

    StringBuilder sbScript = new StringBuilder();
    
    sbScript.Append("<script language='JavaScript' type='text/javascript'>\n");
    sbScript.Append("<!--\n");
    sbScript.Append(this.GetPostBackEventReference(this, "PBArg") + ";\n");
    sbScript.Append("// -->\n");
    sbScript.Append("</script>\n");
    
    this.RegisterStartupScript("AutoPostBackScript", sbScript.ToString());
    

    【讨论】:

      【解决方案5】:

      不,不是来自背后的代码。回发是使用 Http POST 方法从客户端上的页面向服务器上的自身发起的请求。在服务器端,您可以请求重定向,但将是 Http GET 请求。

      【讨论】:

        【解决方案6】:

        您可以使用RepeaterListView 之类的数据绑定控件,根据需要将其重新绑定到控件属性列表,并让它动态生成控件。

        您也可以使用Response.Redirect(".") 重新加载同一页面。

        【讨论】:

          【解决方案7】:

          通过使用 Server.Transfer("YourCurrentPage.aspx");我们可以轻松实现这一点,它比 Response.Redirect();因为 Server.Transfer() 将为您节省往返行程。

          【讨论】:

          • 这不会重置表单域吗?我想这就像一个新的页面调用,这意味着过滤器之类的用户输入将被撤消(如果它们没有存储在会话中)。
          【解决方案8】:

          您可以从Page_Load事件手动调用PostBack调用的方法:

          public void Page_Load(object sender, EventArgs e)
          {
              MyPostBackMethod(sender, e);
          }
          

          但是,如果您的意思是如果您可以将Page.IsPostBack 属性设置为true 而无需真正回发,那么答案是否定的。

          【讨论】:

            猜你喜欢
            • 2011-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-05
            • 1970-01-01
            • 1970-01-01
            • 2021-05-23
            • 2010-10-29
            相关资源
            最近更新 更多