关于用Response.Redirect重定向到新后, 页面显示不了最新数据. 急!!急!!急!!急!!急!!急!!

wang8139 2008-11-07 04:46:42
有两个页面AbortList.aspx、AbortDetail.aspx。在AbortList.aspx页里是“关于公司”数据用GridView控件显示,
AbortDetail.aspx页面为编辑单条数据,下面是两个页面的代码:

AbortList.aspx.cs:
public partial class Admin_Default2 : System.Web.UI.Page
{
Abort abt = new Abort();
protected void Page_Load(object sender, EventArgs e)
{
this.AbortDataBind();
}

protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton lbn = (LinkButton)sender;
this.abt.Delete(lbn.CssClass);
this.AbortDataBind();
}

private void AbortDataBind()
{
gvAbortList.DataSource = abt.GetDataTable();
gvAbortList.DataBind();
}

}

AbortDetail.aspx.cs:

public partial class Admin_Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

//新增保存
protected void btnsave_Click(object sender, EventArgs e)
{
TextBox txtTitelName = (TextBox)fvAbort.FindControl("txtTitelName");
FCKeditor fckCompanyInfo = (FCKeditor)fvAbort.FindControl("fckCompanyInfo");
CheckBox cbxIsStop = (CheckBox)fvAbort.FindControl("cbxIsStop");


//实例化业务类
Abort abt = new Abort();


try
{
//新增数据
abt.Insert(txtTitelName.Text, fckCompanyInfo.Value, cbxIsStop.Checked);

//新增完数据后定向到AbortList.aspx页面
Response.Redirect("AbortList.aspx")
}
catch (Exception )
{
throw;
}

}
protected void btnsave_Disposed(object sender, EventArgs e)
{

}
}

问题是:
新增完数据后定向到AbortList.aspx页面“Response.Redirect("AbortList.aspx")" 后 AbortList.aspx里GridView控件里显示的数据没有最后新增的那条数据。 刷新一下就能显示出来。

是什么地方没有设好吗? 还是而面的缓存问题(页面没有设缓存"OutputCache")?? 急!急!
...全文
627 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunanhhy123 2009-05-27
  • 打赏
  • 举报
回复
加载页面后 用 Response.Flush();刷新页面 看看
baiyashan 2008-11-09
  • 打赏
  • 举报
回复
应该解决了吧.不用我出马了...呵
mjjzg 2008-11-08
  • 打赏
  • 举报
回复
还没解决啊,看了回复的,再也想不出什么更好的答案了
顶吧,以表支持
wang8139 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 toxxj 的回复:]
楼主的两个.aspx.cs文件都调用同一个类文件?

AbortList.aspx.cs:
public partial class Admin_Default2 : System.Web.UI.Page
{

}


AbortDetail.aspx.cs:
public partial class Admin_Default2 : System.Web.UI.Page
{

}
[/Quote]

我把其它中一个类名改掉了,效果也是一样!
wang8139 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yfqvip 的回复:]
C# code private void Page_Load(object sender, System.EventArgs e)
{
Response.Expires=-1;
this.AbortDataBind();
}



还没解决吗?这样呢?
[/Quote]

这样也不行.

我自己做了个试验觉得好奇怪! 在保存按钮,保存数据成功后不重定向Response.Redirect("AbortList.aspx")。
在另一个按钮中 Response.Redirect("AbortList.aspx"),AbortList.aspx页面的数据又是最新的, 真想不通!

浮生若梦丶 2008-11-08
  • 打赏
  • 举报
回复
重新做个绑定
wang8139 2008-11-08
  • 打赏
  • 举报
回复
问题终于解决了, 原来是没有把OleDbConnection给Close掉,

下面是源代码的修改:

public class OLEConnect : DBConnect
{
//数据连接类
private OleDbConnection Con;
//填充DATASET类
private OleDbDataAdapter FDataAdapter;
//执行SQL语句类
private OleDbCommand Cmd;

public OLEConnect()
{
this.Create(this.Connectionstring);
}

public OLEConnect(string AConnectionString)
{
this.Connectionstring = AConnectionString;
this.Create(this.Connectionstring);
}

private void Create(string AConnectionString)
{
Con = new OleDbConnection(AConnectionString);
}

public override bool Open()
{
try
{
if(Con.ConnectionString == "")
Con.ConnectionString = this.Connectionstring;

this.Con.Open();
return true;
}
catch (Exception)
{
//this.ErrorHint = e.Message;
throw;
}
}

public override void open(string ConnectionString)
{
throw new Exception("The method or operation is not implemented.");
}

public override void Close()
{
Con.Close();
}

private DataSet GDataSet(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataSet = new DataSet();
this.FDataAdapter.Fill(this.FDataSet);

return this.FDataSet;
}
catch (Exception)
{
this.FStrErrorSQL = this.FStrSQL;
//this.FErrorHint = e.Message;
throw;
}
}

public override System.Data.DataSet GetDataSet()
{
return this.GDataSet(this.FStrSQL);
}

public override System.Data.DataSet GetDataSet(string AStrSQL)
{
return this.GDataSet(AStrSQL);
}

private DataTable GDataTable(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataTalbe = new DataTable();
FDataAdapter.Fill(FDataTalbe);

return this.FDataTalbe;
}
catch (Exception)
{
this.FStrErrorSQL = AStrSQL;
//this.FErrorHint = e.Message;
throw;
}
}

public override System.Data.DataTable GetDataTalbe()
{
return this.GDataTable(this.FStrSQL);
}

public override System.Data.DataTable GetDataTable(string AStrSQL)
{
return this.GDataTable(AStrSQL);
}

public override bool ExecSQL(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
Cmd.ExecuteNonQuery();

//就在这个地方加了个Close就OK了! ado.net怎么会是这样子的, 语句执行一定要把Connection关掉才能数据才能完成提交, 否则会
//锁定插入的那这行!

Con.Close();

return true;
}
catch (Exception)
{
this.FStrErrorSQL = AStrSQL;
//this.FErrorHint = e.Message;
throw;
}
}

public override DataTable GetDataTable(string AStrSQL, int StartRecord, int MaxRecord)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataTalbe = new DataTable();
FDataAdapter.Fill(StartRecord, MaxRecord, FDataTalbe);

return this.FDataTalbe;
}
catch (Exception)
{
this.FStrErrorSQL = AStrSQL;
throw;
}
}
}


我个人认为, net在多层函数调用时,对数据库操作也具备事务的原子性, 否则不会出现前面的, 在同一按钮事件中保存与Response.Redirect("AbortList.aspx")得不到最新数据, 保存后在别一事件中Response.Redirect("AbortList.aspx") 又可以取得最新数据。

这只是我个的观点,无有误请不见笑!

先看看有没人有更具体的说话, 然后在结贴, 谢谢大家了!!!!!!
wang8139 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 starfd 的回复:]
属于页面缓存问题
你在AbortList.aspx页面的PageLoad事件里添加句:Response.Cache.SetNoStore();不知道拼得对不对,反正不保存页面缓存就行了
[/Quote]

还是不行啊!

晕啦, 就这个问题,停了几天了,郁闷!
  • 打赏
  • 举报
回复
属于页面缓存问题
你在AbortList.aspx页面的PageLoad事件里添加句:Response.Cache.SetNoStore();不知道拼得对不对,反正不保存页面缓存就行了
toxxj 2008-11-07
  • 打赏
  • 举报
回复
继承同一个类文件Admin_Default2?

Response.Redirect 本来就是重定向到某个页面,那么这个页面也必须会重新加载一次的

如果不是继承同一个类文件的问题,请楼主把的IE设置下,清除所有历史记录,设置保存天数为0,并删除所有的临时文件
toxxj 2008-11-07
  • 打赏
  • 举报
回复
楼主的两个.aspx.cs文件都调用同一个类文件?

AbortList.aspx.cs:
public partial class Admin_Default2
: System.Web.UI.Page
{

}


AbortDetail.aspx.cs:
public partial class Admin_Default2
: System.Web.UI.Page
{

}
rjzou2006 2008-11-07
  • 打赏
  • 举报
回复
这个是需要重新绑定的.
bingdian37 2008-11-07
  • 打赏
  • 举报
回复
换个浏览器试试,破IE,不知道自己刷新,

如果其他浏览器不存在问题

楼主就集中精力在缓存过期问题上吧,保证IE可以刷新就可以了

偶的猜测是如此的
满衣兄 2008-11-07
  • 打赏
  • 举报
回复
	private void Page_Load(object sender, System.EventArgs e)
{
Response.Expires=-1;
this.AbortDataBind();
}

还没解决吗?这样呢?
wang8139 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 oec2003 的回复:]
看代码貌似没问题

你可以在AbortList.aspx页的pageload 设置断点 看更新完数据 这个页面是怎么执行的
[/Quote]

pageload 只有个绑定函数, 没法跟踪里面的数据啊!
oec2003 2008-11-07
  • 打赏
  • 举报
回复
看代码貌似没问题

你可以在AbortList.aspx页的pageload 设置断点 看更新完数据 这个页面是怎么执行的
wang8139 2008-11-07
  • 打赏
  • 举报
回复
还有点忘了说了, 首先是打开AbortList.aspx页面的,单击这里的新增按钮定位到AbortDetail.aspx, 保存成功后在跳回AbortList.aspx
wang8139 2008-11-07
  • 打赏
  • 举报
回复
DBConnect:类
public class OLEConnect : DBConnect
{
//数据连接类
private OleDbConnection Con;
//填充DATASET类
private OleDbDataAdapter FDataAdapter;
//执行SQL语句类
private OleDbCommand Cmd;

public OLEConnect()
{
this.Create(this.Connectionstring);
}

public OLEConnect(string AConnectionString)
{
this.Connectionstring = AConnectionString;
this.Create(this.Connectionstring);
}

private void Create(string AConnectionString)
{
Con = new OleDbConnection(AConnectionString);
}

public override bool Open()
{
try
{
if(Con.ConnectionString == "")
Con.ConnectionString = this.Connectionstring;

this.Con.Open();
return true;
}
catch (Exception e)
{
//this.ErrorHint = e.Message;
throw (e);
}
}

public override void open(string ConnectionString)
{
throw new Exception("The method or operation is not implemented.");
}

public override void Close()
{
Con.Close();
}

private DataSet GDataSet(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataSet = new DataSet();
this.FDataAdapter.Fill(this.FDataSet);

return this.FDataSet;
}
catch (Exception e)
{
this.FStrErrorSQL = this.FStrSQL;
//this.FErrorHint = e.Message;
throw (e);
}
}

public override System.Data.DataSet GetDataSet()
{
return this.GDataSet(this.FStrSQL);
}

public override System.Data.DataSet GetDataSet(string AStrSQL)
{
return this.GDataSet(AStrSQL);
}

private DataTable GDataTable(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataTalbe = new DataTable();
FDataAdapter.Fill(FDataTalbe);

return this.FDataTalbe;
}
catch (Exception e)
{
this.FStrErrorSQL = AStrSQL;
//this.FErrorHint = e.Message;
throw (e);
}
}

public override System.Data.DataTable GetDataTalbe()
{
return this.GDataTable(this.FStrSQL);
}

public override System.Data.DataTable GetDataTable(string AStrSQL)
{
return this.GDataTable(AStrSQL);
}

public override bool ExecSQL(string AStrSQL)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
Cmd.ExecuteNonQuery();

return true;
}
catch (Exception e)
{
this.FStrErrorSQL = AStrSQL;
//this.FErrorHint = e.Message;
throw (e);
}
}

public override DataTable GetDataTable(string AStrSQL, int StartRecord, int MaxRecord)
{
try
{
Cmd = new OleDbCommand(AStrSQL, Con);
FDataAdapter = new OleDbDataAdapter(Cmd);
FDataTalbe = new DataTable();
FDataAdapter.Fill(StartRecord, MaxRecord, FDataTalbe);

return this.FDataTalbe;
}
catch (Exception e)
{
this.FStrErrorSQL = AStrSQL;
throw (e);
}
}
}
wang8139 2008-11-07
  • 打赏
  • 举报
回复
谢谢大家这么热心!
在page_load判断是否回传, yfqvip的方法:Response.Redirect("AbortList.aspx?rmd="+new Random().Next(9999).ToString()) ;
这些都试过效果跟已前还是一样!

下面我把Abort类贴出来大家一起分析下, Abort是继承其它类的!

abort类:
public class Abort: DBOperator
{
public Abort() : base()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.SelectSQL = "SELECT * FROM Aborts";
}

//新增数据
public Boolean Insert(string TitelName, string CompanyInfo, Boolean IsStop)
{
InsertSQL = string.Format("INSERT INTO Aborts(TitelName, CompanyInfo, IsStop) VALUES('{0}','{1}',{2})", TitelName, CompanyInfo, IsStop);

return this.Con.ExecSQL(InsertSQL);;
}

//删除数据
public Boolean Delete(string AbortID)
{
this.DeleteSQL = string.Format("DELETE FROM Aborts WHERE ID = {0}", AbortID);
return this.Con.ExecSQL(DeleteSQL);
}

//更新数据
public Boolean Update(string ID, string TitelName, string CompanyInfo, Boolean IsStop)
{
this.UpdateSQL = string.Format("UPDATE Aborts SET Titel = '{0}', CompanyInfo = '{1}', IsStop = {2} WEHRE ID = {3}", TitelName, CompanyInfo, IsStop, ID);
return Con.ExecSQL(UpdateSQL);
}

//返回单条记录
public override DataTable GetDataTable(int ID)
{
this.SelectSQL = string.Format("SELECT * FORM Aborts WHERE ID = {0}", ID);
return this.GetDataTable();
}
}

}



DBOperator类:
public class DBOperator
{
//连接sql数据库
const int SQLDB = 1;
//连接oel数据库
const int OLEDB = 2;

//查询语句
protected string SelectSQL;
//删除语句
protected string DeleteSQL;
//更新语句
protected string UpdateSQL;
//插入语句
protected string InsertSQL;

//protected int StartRecord;
//protected int MaxRecord;
//protected string TableName;

protected DBConnect Con;
protected DataTable FDataTable;
protected DataSet FDataSet;
protected SqlCommand FCommand;

public DataTable DataTable
{
get { return FDataTable; }
}

public DataSet DataSet
{
get { return FDataSet; }
set { FDataSet = value; }
}

public DBOperator()
{
int IntDBType;

//IntDBType = Convert.ToInt16(ConfigurationSettings.AppSettings["DBType"].);

IntDBType = 2;

if (SQLDB == IntDBType)
{
Con = new SQLConnect();
}
else if (OLEDB == IntDBType)
{
Con = new OLEConnect();
}

try
{
Con.GetConnectString();
Con.Open();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

public DBOperator(int ConnectType)
{
if (SQLDB == ConnectType)
{
Con = new SQLConnect();
}
else if (OLEDB == ConnectType)
{
Con = new OLEConnect();
}

try
{
Con.GetConnectString();
Con.Open();
}
catch (Exception e)
{
throw new Exception(e.Message);
}

}

//以返回DataSet数据集的方式查询所以记录
public virtual DataSet GetDataSet()
{
this.FDataSet = Con.GetDataSet(SelectSQL);
return this.FDataSet;
}

//以返回DataTable数据集的方式查询所以记录
public virtual DataTable GetDataTable()
{
this.FDataTable = this.Con.GetDataTable(SelectSQL);
return this.FDataTable;
}

//加入条件查询并返回DataSet结果集
public virtual DataSet GetDataSet(string Condition)
{
this.BindSQL(Condition);
this.FDataSet = Con.GetDataSet(this.SelectSQL);
return this.FDataSet;
}

//加入条件查询并返回DataTable结果集
public virtual DataTable GetDataTable(string Condition)
{
this.BindSQL(Condition);
this.FDataTable = Con.GetDataTable(this.SelectSQL);
return this.FDataTable;
}

//在原有的SQL语句中加入查询条件
private void BindSQL(string Condition)
{
this.SelectSQL = this.SelectSQL + " WHERE " + Condition;
}

//返回条有限条数的记录集
public virtual DataTable GetDataTable(int StartRecord, int MaxRecord)
{
this.FDataTable = this.Con.GetDataTable(SelectSQL, StartRecord, MaxRecord);
return this.FDataTable;
}

public virtual DataTable GetDataTable(int ID)
{
return null;
}
}
}

还有个DBConnect 接下贴, 太多了贴不完
lincnl 2008-11-07
  • 打赏
  • 举报
回复
缓存问题,可以加入!Page.IsPostBack来告诉页面在非回传页面中强制执行你的检索,否则页面可以从缓存中直接提取服务器已发送的页面信息中加载信息;第二种方法就是禁止页面缓存,不过这样IE的“后退”按钮会有问题。
加载更多回复(12)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧