Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对使用ViewState和动态添加的usercontrol感到困惑_Asp.net_Vb.net_Viewstate_Webusercontrol - Fatal编程技术网

Asp.net 对使用ViewState和动态添加的usercontrol感到困惑

Asp.net 对使用ViewState和动态添加的usercontrol感到困惑,asp.net,vb.net,viewstate,webusercontrol,Asp.net,Vb.net,Viewstate,Webusercontrol,在我的网页上,我加载了一个usercontrol的多个实例,有时usercontrol本身也会加载。我需要为回发的往返过程保存一组属性,但我不知道如何将这些属性保存到ViewState,并将它们再次设置到usercontrol中的repeater项 在这种情况下,有人能帮我吗?我已经阅读了Viewstate上的MSDN,但出于某种原因,我对它不是很了解 这就是加载父用户控件的方式(子控件的加载方式与加载同一用户控件的方式相同) 访问视图状态很简单,例如ViewState(“PropertyNam

在我的网页上,我加载了一个usercontrol的多个实例,有时usercontrol本身也会加载。我需要为回发的往返过程保存一组属性,但我不知道如何将这些属性保存到ViewState,并将它们再次设置到usercontrol中的repeater项

在这种情况下,有人能帮我吗?我已经阅读了Viewstate上的MSDN,但出于某种原因,我对它不是很了解

这就是加载父用户控件的方式(子控件的加载方式与加载同一用户控件的方式相同)


访问视图状态很简单,例如
ViewState(“PropertyName”)
。视图状态包特定于控件实例,因此可以在多个控件类型和实例中使用相同的属性名称

这里唯一重要的是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
....

这是一个控件ID问题,我将其删除,而不是添加ID

演示如何动态创建UserControl。无法将这些属性添加为UserControl中的服务器控件(f.e.TextBox)。通过这种方式,这些属性将自动存储在ViewState中。否则,您只需手动添加它们:
ViewState(“MyProperty1”)=value
I添加代码以加载控件。“ctl.epnts=subco.points”用于中继器中加载的AjaxControlToolKit额定值控件。。。。您在哪里调用加载控件?请记住,即使在回发时,您也必须使用与以前相同的ID重新加载它们。正在Page_Init上调用load controls方法。您可以在Page_Init中写入ViewState,但您无法读取它,因为它在页面生命周期中为时过早。如果两种方法都需要,页面加载会更好。但老实说,我还不明白你的实际问题是什么。我尝试将每个用户控件设置为一个唯一的id(ctl.id=item.groupid&item.catid),但在回发时,Viewstate中没有任何内容。以下方法用于更改受中继器保护的子控件中的分级控制值(ByVal sender作为对象,ByVal e作为AjaxControlToolkit.RatingEventTargets)Dim ctl作为AjaxControlToolkit.Rating=CType(sender,AjaxControlToolkit.Rating)ViewState(ctl.ClientID)=ctl.ClientID e.CallbackResult=e.Value EndSub@mattgcon,确保ID存在于整个控件树继承人中,即用户控件的父控件具有ID等。除此之外,您将用户控件添加到页面的位置/parent-
Load\u controls
没有任何此类代码。无论如何,ID应为assig在将控件添加到页面之前,用户控件可以将用户控件的另一个实例添加到自身。internet上是否有任何地方可以显示代码,一个有更多空间显示所有内容的地方
...
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
....