Response.Redirect导致IsPostBack为true

时间:2008-10-19 22:29:26

标签: asp.net

我在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();
}

6 个答案:

答案 0 :(得分:3)

Response.Redirect将从浏览器触发HTTP GET 。由于没有发布数据,IsPostBack是错误的。你还有其他事情要发生。

我建议启动Fiddler并查看请求序列。它应该看起来像:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我建议将此作为解决问题的更好方法,而不是尝试从浏览器重定向。

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();
}

答案 3 :(得分:1)

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

答案 4 :(得分:0)

来自MSDN:   HttpResponse.Redirect方法(String url,Boolean endResponse)   将客户端重定向到新URL。指定新URL以及是否应终止当前页面的执行。

URL   目标位置。

endResponse   指示当前页面的执行是否应终止。

您传递的值为true,因此当前页面正在终止,因此您正在看到空白页面。

编辑:我不确定这个布尔值是否导致问题...尝试完全删除第二个参数。 Response.End()应该照顾你想要完成的任务。

答案 5 :(得分:0)

从某些研究中,重定向到您刚才所在的页面可能会导致双重回复,从而导致您丢失数据。在黑暗中拍摄,但也许这可能会有所帮助:

http://forums.asp.net/t/348550.aspx