每天都是崭新的
期待一次一个人的旅行

最近在做一个系统的是否犯了一个小错误,在页面的Page_Load方法中做出了通常使用的Page.IsPostBack的判断,在页面刷新或者第一次请求的时候从URL中读取了一些参数,放入了Session中,然后系统中所有页面共享Session内容。但是就是这样的一个简单的应用竟然出现了错误。代码如下:

 

代码
protected void Page_Load(object sender, EventArgs e)
{
    
if (!Page.IsPostBack)
    {         
         
string[] viewContent;
         viewContent 
= HttpContext.Current.Request.QueryString.GetValues("vc");
         
if (viewContent != null)
         {
            HttpContext.Current.Session[
"ViewContent"= viewContent[0];
         }    
    }
}

 

代码非常的简单,但是在访问的是否就出现了问题。此页面的名称为Index.aspx,部署到IIS中以后,将此虚拟目录的根页面设置为Index.aspx,这个是为了保证在用户直接访问这个目录的时候能够访问到一个默认的页面(地球人都知道,呵呵)。但是在页面展现出来以后,点击页面上的功能按钮(例如获取个数据什么的)的时候发现Session中存在的值并不是从URL中参数中获取的,而是一个默认值,这个是为什么呢?通过调试程序发现,当点击按钮的时候程序走入了Page_Load事件,但是有了Page.IsPostBack这个判断,是不应该进入这个if条件后的代码的,但是在调试的时候进入进入了这段代码,并且发现Request请求的Url并没有参数,经过几番周折最后终于找到了罪魁祸首—解析出的一个服务端控件ImageButton(服务端为Input type=image)的src属性为空,原来当src属性为空的是否,它会发起一个请求,请求目录设置的默认页面(Index.aspx),这样就把前面赋值过的Session给覆盖了。看来这个小小的属性也能带来大麻烦啊。同样其他含有src属性的对象同样存在这样的问题,例如HTML中的frame、img等等。

 

 

posted on 2009-12-17 14:27  我的小作坊  阅读(1643)  评论(0编辑  收藏  举报