我在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();
}
答案 0 :(得分:3)
Response.Redirect将从浏览器触发HTTP GET 。由于没有发布数据,IsPostBack是错误的。你还有其他事情要发生。
我建议启动Fiddler并查看请求序列。它应该看起来像:
答案 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)
从某些研究中,重定向到您刚才所在的页面可能会导致双重回复,从而导致您丢失数据。在黑暗中拍摄,但也许这可能会有所帮助: