• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗中...

曾经的程序员。ASP.NET/C#, JavaScript, PL/SQL, T-SQL; 工具: VS2003/2005, Oracle, SQLServer; 偶尔写点CSS, 批处理.
头脑中经常有新想法, 可惜没有去实现.
Never give up.
Never get into a fight with a pig. Both of you will get dirty. But the pig actually enjoys it.
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Microsoft AJAX 1.0的临时数据的历史保存以及__doPostBack事件中Transfer的问题

Microsoft AJAX 1.0的临时数据的历史保存以及__doPostBack事件中Transfer的问题,主要描述的是遇到问题解决的过程,并无提出新的解决方案。Microsoft ASP.NET Futures

这几天遇到个问题,其实也是自己钻牛角尖。因为工作环境分内外网,而且内外网完全隔离,所以以下文字纯手工录入(包括大部分代码),可能会有个别错误。

放首页,是因为遇到的问题很常见;也希望大家有好的建议提提,给大家批评下,让自己能进步。主要描述的是遇到问题解决的过程,并无提出新的解决方案。

先介绍下以下遇到问题的情景: 查询页面, 查询结果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)并引用之。总的感觉,还不错,就是需要反复测试,因为有时候反倒弄巧成拙。


posted on 2010-02-02 11:06  jes  阅读(407)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3