Microsoft AJAX 1.0的临时数据的历史保存以及__doPostBack事件中Transfer的问题
这几天遇到个问题,其实也是自己钻牛角尖。因为工作环境分内外网,而且内外网完全隔离,所以以下文字纯手工录入(包括大部分代码),可能会有个别错误。
放首页,是因为遇到的问题很常见;也希望大家有好的建议提提,给大家批评下,让自己能进步。主要描述的是遇到问题解决的过程,并无提出新的解决方案。
先介绍下以下遇到问题的情景: 查询页面, 查询结果GridView展示, 并放在一个UpdatePanel中(主要是翻页无刷新用,这里先不讨论用不用UpdatePanel合适)。需要做到的功能是双击某行,跳转到一个详情页。在详情页操作完毕后,点击后退按钮回退到之前的查询结果页。采用的是.NET Framwork 2.0
第一个问题是:双击GridView的某行,Transfer到详情页。之前遇到过问题,但是项目紧所以没时间去解决,用 Response.Redirect 重定向跳转临时解决这个问题, 这也是大多数采取的方法。最近几天稍微闲一点,看到园子里http://www.cnblogs.com/soulfjq/articles/1380278.html的这篇博文。觉得可行,我稍微改了下,我习惯在RowDataBound事件中添加e.Row.Attributes,类似以下代码,记得修改__doPostBack第一个参数替换为你自己的GridView控件的id。
e.Row.Attributes.Add("onclick", "javascirpt:__doPostBack('GridView1','Select$" + e.Row.RowIndex + "')");
完事后再添加SelectedIndexChanged事件, 类似如下,我的还需要传值(用HttpContext.Current.Items传值)
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow gvr = GridView1.SelectedRow as GridViewRow;
HttpContext.Current.Items["id"] = gvr[0];
Server.Transfer("详情页.aspx");//没带参数
//显示单示列的ID GridView1行单击事件操作
//Server.Transfer("UpdateCargoInfo.aspx?Haven_id=" + GridView1.SelectedValue);
}
在详情页获取参数的方法, 稍后再敲. 其实和传入参数差不多,不过可以稍微判断下传入到详情页的方式.(决定不敲了,Google)
运行出错了, 报错: (错误截图再补上)
这个是肯定的,因为默认 EnableEventValidation = true
按照提示在aspx页面 设置EnableEventValidation = false;//这样可能不安全
再次运行, 还是报错, 报的是另外一个错误, Sys.WebForms.PageRequestManagerParserErrorException 错误
后来看这个帖子:
http://topic.csdn.net/u/20090428/11/3c0477e5-6336-4547-b2e8-5d9d6913f147.html?seed=1833566810&r=63154616#r_63154616
里面绝大多数人都是建议用重定向。最后在该帖子Sandy945的答复中看到"为updatepanel增加了postbacktrigger", 于是将该GridView添加到UpdatePanel的PostBackTrigger中去.
经过这番折腾, 页面终于能够Transfer到详情页, 速度比重定向明显快很多.
不过,最终我还是选择重定向而没有修改,因为Transfer到详情页,再后退到查询结果页面的时候,如果要保持查看详情页之前的状态,没有好的解决方案。
遇到的第二个问题:
因为采用了Microsoft的AJAX 1.0,查询结果GridView放在一个UpdatePanel内,所以看完详情页点击后退按钮的时候,完了,只剩下查询条件,查询结果一点都没了,和点击查询按钮之前的样子一模一样。这样怎么办呢?这肯定用户使用感觉很差。Google上搜到以下一篇文章:
http://www.cnblogs.com/WizardWu/archive/2008/09/30/1302646.html
(使用.NET Framework 3.5SP1的可以无视,当然看看原理也无妨)
里面说的很详细,我就不转述了。补充下失效的下载链接:
Microsoft ASP.NET Futures (July 2007)
下载链接:http://download.microsoft.com/download/4/c/8/4c81ddaf-e14f-4756-9490-91cb4cbb53a8/ASPNETFutures.msi
下载页面:http://www.microsoft.com/Downloads/details.aspx?familyid=A5189BCB-EF81-4C12-9733-E294D13A58E6&displaylang=en
Microsoft ASP.NET Futures真是个好东西。园子里不少兄弟07年就有介绍了。
我安装后直接拖拉控件会报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
安装过程无异常,重装后还是这个问题。估计是一直休眠,没重启机器,不知道何解?
所以按照上面博文的例子用手工敲代码进去。就是默认引用的是for .NET 3.5的版本。可以手工从安装目录下的2.0目录复制一份到引用目录(比如bin)并引用之。总的感觉,还不错,就是需要反复测试,因为有时候反倒弄巧成拙。