【问题标题】:Response.Redirect causes IsPostBack to be trueResponse.Redirect 导致 IsPostBack 为真
【发布时间】:2011-12-28 09:21:55
【问题描述】:

我在 ASP.Net 页面上有一个按钮,它会在执行一些处理后调用 Response.Redirect 回到同一页面,以便重新显示查询结果。但是,由于某种原因,页面出现空白。似乎 IsPostBack 在重定向后返回 true。有人知道为什么会这样吗?

该页面是社区服务器中的自定义页面。这是基本代码:

void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM ge_vw_NonResidents", connStr);
        DataTable tbl = new DataTable();
        da.Fill(tbl);
        da.Dispose();
        rptNonResidents.DataSource = tbl;
        rptNonResidents.DataBind();
    }
}

void btnApprove_Command(object sender, CommandEventArgs e)
{
    // Code removed for testing.

    Response.Clear();
    Response.Redirect("ApproveResidents.aspx", true);
    Response.End();
}

【问题讨论】:

  • 你试过Response.Redirect("ApproveResidents.aspx", false);
  • 不,这没有帮助。

标签: asp.net


【解决方案1】:

Response.Redirect 将触发来自浏览器的 HTTP GET。由于未发布任何数据,因此 IsPostBack 为 false。你还有其他事情要发生。

我建议启动Fiddler 并查看请求的顺序。它应该类似于:

  • 客户端:HTTP POST(按钮点击)
  • 服务器:HTTP 302(重定向)
  • 客户端:HTTP GET
  • 服务器:HTTP 200(写入页面)

【讨论】:

  • 感谢您的建议。我最终安装了 HttpFox(一个 FF 插件)。我刚刚收到该页面的 POST。我没有收到重定向或 GET。
【解决方案2】:

我建议这比尝试从浏览器重定向更好地解决您的问题。

protected void Page_Load( object sender, EventArgs e )
{
   if (!IsPosBack) {
      BuildData();
   }
}

void btnApprove_Command(object sender, CommandEventArgs e)
{
    // do your stuff and clear any some controls, maybe

    BuildData();
}

private void BuildData()
{
   string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
   SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM ge_vw_NonResidents", connStr);
   DataTable tbl = new DataTable();
   da.Fill(tbl);
   da.Dispose();
   rptNonResidents.DataSource = tbl;
   rptNonResidents.DataBind();
}

【讨论】:

  • 这个方案的问题是,如果用户重新加载页面或者使用返回按钮,就会重新提交。尽管我可以添加代码以确保不会导致问题,但仍会提示用户重新提交。使用 Response.Redirect 将避免这些问题。
【解决方案3】:

抱歉,这是一个 id-10-t 错误。我的事件处理程序根本没有被调用。该页面具有 EnableViewState="false"。一旦我将其更改为 true,它就起作用了。

我也接受了 tvanfosson 的建议。这允许我显示确认消息。我可以很容易地检查是否已经采取了行动并安全地忽略它。因为我可能是唯一一个见过这个屏幕的人,所以我不太关心可用性。

【讨论】:

    【解决方案4】:

    该页面已发回,这就是您将其视为真实的原因。确保它是假的。

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 2011-01-19
      • 2011-01-12
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多