asp.net - 向页面添加多个相同类型的用户控件

标签 asp.net user-controls

有人问过与此类似的问题,但似乎没有一个问题能够解决我的具体情况,这就是我正在尝试做的事情。

我有一个管理学生信息的用户控件。即名字、姓氏、地址等。

我有一个网页/表单,上面有一个按钮。 “添加学生”。我想要完成的是在每次单击后将新的 StudentInfo 控件添加到网络表单中。

我当前的代码看起来像这样

Private Sub btnAddStudent_Click(sender as object, ByVal e As System.EventArgs)
Dim lStudentInfo as Control

LoadControl("~/StudentInfo.ascx")

Me.placeholder1.controls.add(lStudentInfo)

End Sub

使用此代码,仅添加一个 StudentInfo 控件,再次按下“添加”按钮后,不会在第一个控件下方添加新的 StudentInfo 控件,并且会清除第一个控件中输入的文本/数据。

预先感谢您的帮助。

最佳答案

发生的情况是,每次您进行回发时,您之前的控制都会丢失。请记住,每次回发都使用页面类的全新实例。一旦 http 请求完成,您上次添加控件的实例就会被销毁 - 可能在浏览器完成加载其 DOM 之前。

如果您希望每个回发都存在一个控件,则必须在每个回发上添加该控件

此外,如果您希望 ViewState 对控件起作用,您需要将其添加到页面的 Load 事件之前。这意味着在 Init 或 PreInit 上。

Private Sub btnAddStudent_Click(sender as object, ByVal e As System.EventArgs)
    Me.placeholder1.controls.add(LoadControl("~/StudentInfo.ascx"))
    Session("NewStudentControls") += 1
End Sub

Protected Sub Page_Init(sender as object, e as system.eventargs)
     For i As Integer = 1 To Session("NewStudentControls")
          Me.placeholder1.controls.add(LoadControl("~/StudentInfo.ascx"))
     Next
End Sub   

关于asp.net - 向页面添加多个相同类型的用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466760/

相关文章:

c# - 何时添加组件类与用户控件?

c# - dragablz TabablzControl wpf 禁用标签切换和拖动

.net - Telerik,如何在 RadForm TitleBar 中正确添加 RadButtonElement?

c# - 多个 Action 可以服务于同一个 View 吗?

asp.net - Nginx 无法将 Docker 部署到 Amazon

c# - asp.net 找不到资源?

javascript - 当 javascript 以编程方式更改文本框值时调用服务器端方法

.net - 需要 AAP 建议 : (Linq or SqlDataSource? ) + (Response.Write 或用户控件或中继器?

asp.net - 如何最佳拦截 ASP.NET 用户控件子树中所有元素的解析

asp.net - 让 ASP.NET MVC Web 应用程序加载域中性