关于Frame的问题

1.错误提示

Sys.ArgumentOutRangeException:Value must be an integer.Parameter name:x  Actual value was NaN.
今天的项目中使用AJAXTOOLKIT的时候碰到这个问题,原先以为是AJAXTOOLKIT带来的问题,去掉updatePanal后仔细看了才发现并不是AJAXTOOLKIT带来的问题,原来最开始就有错误报出,只是每次你提交的时候会很快的刷新页面,这个时候会把你的脚本错误刷掉(其实就是frame的错误刷掉,那样你就看不到了)。

原来罪魁祸首是index.htm中的Frame造成的。

frame或iframe的frameborder属性应使用1或0,如:frameborder= "0 "
而不能使用yes或no,如:frameborder= "no "

因此将frameborder= "no "改成frameborder= "0 " ,问题就解决了。

 

 

 

2.关于在frame中Session传递的问题。

用经验的开发者可能会发现,在frame中,多用户登录的情况下,如果你使用的是HTML页面作为框架首页,就会出现Session串的情况。什么是串?也就是B用户登录后记录的Session给了先前登录的A用户......

 

在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。
然而如果你使用Html页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回是并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样这些页面都会产生自己的SessionID,所以在这种情况下就会出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID

****************************************************************

其实能不用Session是最好的了,可以通过Form验证登录后,User.Identity.Name可以取得到用户登录的ID,当然,如果要得到用户名之类的消息,可以通过ID查询咯。

现在很多商业的网站都会用profile保存用户的临时信息,也就是用一个数据库专门存放用户的信息。.WEB2.0提供了一套profileprovider完全可以实现用户信息的存储,不过如果要使用,就得用全了,包括membership,rolemanager等。



 

;