在我的网页上,我正在加载用户控件的多个实例,有时候用户控件本身也会被加密。我需要为回发的往返保存一堆属性,但我对如何将这些属性保存到ViewState并将它们再次设置为usercontrol中的转发器项感到困惑。
在这种情况下,有没有人可以帮助我,我已经在Viewstate上阅读了MSDN,但由于某种原因我并不理解它
这是我加载父用户控件的方式(使用相同的用户控件以相同的方式加载子控件)
Protected Sub Load_Controls(ByVal list As List(Of BSEvaluationGroup.category), ByVal gid As Integer, ByVal pid As Integer, ByVal fid As Integer)
Dim item As BSEvaluationGroup.category
For Each item In list
Dim ctl As PerformanceEvaluationSubcontractorControl = CType(Page.LoadControl("PerformanceEvaluationSubcontractorControl.ascx"), PerformanceEvaluationSubcontractorControl)
ctl.categoryid = item.catid
ctl.categoryname = item.catname
ctl.projectid = pid
ctl.folderid = fid
ctl.groupid = gid
ctl.parentid = item.parid
ctl.clist = item.categories
ctl.plist = item.points
ctl.parentpage = Me
ctl.EnableViewState = "true"
If (Not subcon Is Nothing AndAlso Not subcon.points Is Nothing) Then
ctl.epnts = subcon.points
End If
AddHandler ctl.BubbleCalculate, AddressOf Me.PostRating
Select Case gid
Case 1
Me.officephld.Controls.Add(ctl)
Dim ohrule As HtmlGenericControl = New HtmlGenericControl("hr")
ohrule.Style.Add("width", "100%")
ohrule.Style.Add("background-color", "Silver")
ohrule.Style.Add("size", "1px")
ohrule.Style.Add("border-width", "0")
ohrule.Style.Add("padding-top", "1px")
ohrule.Style.Add("float", "left")
Me.officephld.Controls.Add(ohrule)
Case 2
Me.sitephld.Controls.Add(ctl)
Dim shrule As HtmlGenericControl = New HtmlGenericControl("hr")
shrule.Style.Add("width", "100%")
shrule.Style.Add("background-color", "Silver")
shrule.Style.Add("size", "1px")
shrule.Style.Add("border-width", "0")
shrule.Style.Add("padding-top", "1px")
shrule.Style.Add("float", "left")
Me.sitephld.Controls.Add(shrule)
End Select
Next
End Sub
答案 0 :(得分:0)
访问视图状态很简单,例如ViewState("PropertyName")
。 View State包特定于控件实例,因此您可以在多个控件类型和实例中使用相同的属性名称。
唯一重要的是ASp.NET运行时必须匹配视图状态包来控制实例,并且它使用ID属性(在父命名容器中是唯一的)。因此,为动态用户控件实例分配唯一ID(并在回发时维护相同的控制树层次结构和ID)非常重要 - 实际上这意味着在回发时执行相同的代码并且不使用随机ID。所以你的代码应该是
...
Dim n As Integer
n = 1
For Each item In list
Dim ctl As PerformanceEvaluationSubcontractorControl = CType(Page.LoadControl("PerformanceEvaluationSubcontractorControl.ascx"), PerformanceEvaluationSubcontractorControl)
ctl.ID = "MyCtl" & n.ToString()
ctl.categoryid = item.catid
....
答案 1 :(得分:0)
这是一个控件ID问题,我删除了它而不是添加ID