2010-07-22 49 views
1

我在动态创建asp.NET在现有的DataGrid的不同行dragrids是否有F5刷新浏览器,回发?(asp.NET)

我产生DataGrid中有一列是TemplateColumn中之间的差异(一个CheckBox列)。

在我的父数据网格中,我有一个带有复选框的模板列。当我选中或取消选中复选框的值时,会调用check_change方法(autopostback设置为true),动态生成的数据网格将丢失选中的复选框(复选框全部取消选中)。但是,如果我检查孩子(动态生成)网格的任何复选框,然后按F5,它会刷新页面,但仍然有我选中的复选框。

发生了什么? post-back与刷新F5有何不同?理解这可能会帮助我解决我的问题:DataGrid not being altered!

+0

你测试你的代码 - 的'Page.IsPostBack'财产背后? – 2010-07-22 12:37:17

回答

2

很简单,浏览器缓存响应。所以如果你按下F5键,你通常每次都会看到你的网格和选中的复选框。但是,如果您在代码中进行回传,您可以强制浏览器连接到服务器并发布数据。

然后它会等待来自服务器的响应,并返回回传的原因。

恼人的,但这就是浏览器的工作原理。您可以强制完成刷新,而不是通过按Ctrl + F5来模拟回传。

这是(有时)与浏览器相关的,因为并非所有浏览器的行为都与您在此处描述的相同。

如果回发是必要的,但您仍然希望保持复选框状态为选中状态,那么我建议您改用AJAX呼叫。

+0

您是否推荐使用asp.NET学习Ajax的站点? – 2010-07-22 12:35:19

+5

Ctrl + F5不会模拟回传,它只是覆盖浏览器的缓存。首次访问页面或刷新页面时使用HTTP GET检索页面;回发使用HTTP POST将数据发布到服务器。Ajax在这里可能没有帮助,你需要确保动态控件在每个回传中都被保存。 – 2010-07-22 12:44:59

+1

道歉,我最好的英语失败了:)我的意思是说CTRL + F5会清除缓存*就像*后台会强制浏览器。我也同意他需要实现某种持久状态,但是,这取决于具体的应用和对他有用的东西。我推荐学习AJAX的唯一网站是asp.net的网站本身和大量的Google搜索:) – AcidRaZor 2010-07-22 13:00:20

1

“刷新”只是调用最后一个页面请求。所以,如果你只是浏览一个页面然后点击刷新,它只是再次请求页面 。

回传本质上是在页面上发送 信息回到服务器的动作。

+0

你认为我仍然可以在没有回发的情况下触发CheckChanged事件....这是我的问题,由于回发无法更改数据网格,并且同时无法在没有回发的情况下触发checkChanged! – 2010-07-22 12:24:54

0

理想情况下,它是一个PostBack,但它将取决于您的浏览器设置,如果您已将其设置为从服务器请求页面进行每次访问或从本地Histroy Cache中选取。

点击刷新按钮会向服务器发出一个新的请求, ,它不会改变Http Method(Get , Post)的状态,我的意思是它不会改变页面的IsPostBack状态。

但是提交表单(张贴形式)将IsPostBack属性设置为true 约page_load它会被称为为两种情况