用户控件传递参数问题,大家进来看看
我在用户控件使用了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
问题点数:20、回复次数:12Top
1 楼zhanmincode(killer)回复于 2005-05-11 11:07:57 得分 3
要先判断一下ViewState是否为空,因为刚进Page_Load的时候页面是第一次导入当然是空的
If Not Page.IsPostBack Then
Response.Write(ViewState("str"))----没有值了!!
End If
这个只有在第一次进入页面是才会执行的!
解决方法:
直接用赋给用户控件的值,然后保存的ViewState中Top
2 楼liangbinlb(宁静致远)回复于 2005-05-11 11:10:32 得分 0
zhanmincode(killer
能不能说的具体一点呀!在线等。。。Top
3 楼aquariusdeng(无泪有伤之新手上路)回复于 2005-05-11 12:36:40 得分 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值就能取到
Top
4 楼liangbinlb(宁静致远)回复于 2005-05-11 13:43:20 得分 0
如果不用Hidden,可以做到传值吗?
我现在是宿主页面的page_load事件中传递参数给用户控件,传值完毕后,用户控件的其他地方都可以读出值,就是在用户控件的page_load事件中参数的值为空。但是宿主页面的page_load事件是先于用户控件的page_load事件,按理说应该是没有问题的。但是却出现了以上的问题。大虾们还有什么办法吗??
救命呀!!!Top
5 楼zhanmincode(killer)回复于 2005-05-11 13:56:10 得分 3
用户调用你的控件不是肯定要先把参数传给你吗?第一次用的时候你可以直接用,紧接着就把参数保存到ViewState中,这样你控件中的参数就不会丢失了Top
6 楼liangbinlb(宁静致远)回复于 2005-05-11 14:08:31 得分 0
参数不是不可以用,只是在用户控件的page_load事件中,参数值就不知为何消失了。郁闷ingTop
7 楼huashi_shihuashi(化石)回复于 2005-05-11 14:09:08 得分 3
假如说你的值只是一次的(就是在每次刷新页面的时候有用),可直接调用其它用户控件或页面的方法,假如说你的值需要在相应的页面中保存,使用 ViewState,假如你的值需在不同页面之间不停的切换而且需要保存值的话,就请用SessionTop
8 楼liangbinlb(宁静致远)回复于 2005-05-11 14:11:48 得分 0
还有我也是通过ViewState保存参数值的,依旧会出现这种问题。另外我刚刚使用了Hidden,好像也不行。Top
9 楼liangbinlb(宁静致远)回复于 2005-05-11 14:35:01 得分 0
up,up...
自己顶到思归大哥的出现Top
10 楼liangbinlb(宁静致远)回复于 2005-05-11 14:53:37 得分 0
大家帮帮我呀!!Top
11 楼xiaoyaoliang(逍遥亮)回复于 2005-05-11 14:54:01 得分 3
兄弟,page_load事件里面的postback是页面第一次初始化的时候才会进去的,viewstate里面当然不会有值存在的啊,而且是在两个页面之间传值,用的应该是session吧
Top
12 楼n10z(小鱼)回复于 2005-05-17 11:23:06 得分 5
要建一个委托,把用户控件里的Page_Load事件委托出来,在委托里进行赋值Top




