我在用户控件使用了ViewState("str")来存储宿主页面传递给用户控件的值。现在发现了问题:在用户控件的其它函数及过程中都可以读出ViewState("str")中的值,可是在用户控件的page_load事件中读ViewState("str")时,却为空值。
如果不使用ViewState的话,而使用Private str as string的话,那么在用户控件的任何地方都无法得到宿主页面传递给用户控件的值。
大家看看如何处理问题。代码如下:
付值:  
       Public  Property  StrSql()  As  String  
               Get  
                       Return  Me.ViewState("str")  
               End  Get  
               Set(ByVal  Value  As  String)  
                       Me.ViewState("str")  =  Value  
               End  Set  
       End  Property  
 
其它函数及模块:  
       Private  Function  getCountPerPage()  As  Integer  
               Return  CInt(ViewState("str"))------有值  
       End  Function  
 
page_load事件﹕  
 
       Private  Sub  Page_Load(ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  MyBase.Load  
               If  Not  Page.IsPostBack  Then  
                       Response.Write(ViewState("str"))----没有值了!!  
               End  If  
       End  Sub

解决方案 »

  1.   

    要先判断一下ViewState是否为空,因为刚进Page_Load的时候页面是第一次导入当然是空的
     If  Not  Page.IsPostBack  Then  
                           Response.Write(ViewState("str"))----没有值了!!  
                   End  If  
    这个只有在第一次进入页面是才会执行的!
    解决方法:
    直接用赋给用户控件的值,然后保存的ViewState中
      

  2.   

    zhanmincode(killer
    能不能说的具体一点呀!在线等
      

  3.   

    不能通过ViewState在宿主和用户控件之间传值吧
    这两个页面中间的ViewState就算你用了同一个名字
    他们代表的含义也是不一样的ViewState的机制和hidden控件是差不多的,只是比hidden多一层加密
    就像你在宿主和用户控件中使用同样ID的文本框,那两个文本框也会在各自的页面独立工作,互不影响
    ViewState也应该是这样如果你在用户控件的其他地方取到了ViewState("str")),你再仔细查看一遍,
    这个值是否是你在用户控件里面赋过的
    (你可做个测试,看看在用户控件里面赋值是不是也不会影响宿主页面的ViewState("str")值)如果要使宿主和用户控件之间能传递值且页面经过提交还能保持住,
    使用Hidden控件可以做到,不过安全性稍低一点
    在宿主页面有一个Hidden,ID是h1,(ruanat=server)
    在用户控件找到它:
    System.Web.UI.HtmlControls.HtmlInputHidden h = (System.Web.UI.HtmlControls.HtmlInputHidden)this.Parent.FindControl("h1");
    此时在用户控件里对h进行操作,与在宿主对h1进行操作效果是等同的
    即在宿主中h1赋值后,用户控件中取h值就能取到
      

  4.   

    如果不用Hidden,可以做到传值吗?我现在是宿主页面的page_load事件中传递参数给用户控件,传值完毕后,用户控件的其他地方都可以读出值,就是在用户控件的page_load事件中参数的值为空。但是宿主页面的page_load事件是先于用户控件的page_load事件,按理说应该是没有问题的。但是却出现了以上的问题。大虾们还有什么办法吗??救命呀!!!
      

  5.   

    用户调用你的控件不是肯定要先把参数传给你吗?第一次用的时候你可以直接用,紧接着就把参数保存到ViewState中,这样你控件中的参数就不会丢失了
      

  6.   

    参数不是不可以用,只是在用户控件的page_load事件中,参数值就不知为何消失了。郁闷ing
      

  7.   

    假如说你的值只是一次的(就是在每次刷新页面的时候有用),可直接调用其它用户控件或页面的方法,假如说你的值需要在相应的页面中保存,使用 ViewState,假如你的值需在不同页面之间不停的切换而且需要保存值的话,就请用Session
      

  8.   

    还有我也是通过ViewState保存参数值的,依旧会出现这种问题。另外我刚刚使用了Hidden,好像也不行。
      

  9.   

    up,up...
    自己顶到思归大哥的出现
      

  10.   

    兄弟,page_load事件里面的postback是页面第一次初始化的时候才会进去的,viewstate里面当然不会有值存在的啊,而且是在两个页面之间传值,用的应该是session吧
      

  11.   

    要建一个委托,把用户控件里的Page_Load事件委托出来,在委托里进行赋值