Я добавляю веб-элементы управления динамически на страницу.Использование метода LoadControl
, который принимает только виртуальный путь, указывающий на .ascx
, работает очень хорошо.Однако перегрузка LoadControl
, которая принимает тип и массив параметров, вызывает у меня некоторые головные боли.
Пользовательский веб-элемент управления создается, как и ожидалось, но элементы управления, содержащиеся в пользовательском веб-элементе управления, являются нулевыми, и я получаю исключение, как только пытаюсь работать с ними.Странно, потому что он работает, когда используется первая версия LoadControl
.
Пользовательский веб-элемент управления, простой, с элементом управления Literal
:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MyControl.ascx.vb" Inherits="MyControl" %>
<asp:Literal ID="myLiteral" runat="server"></asp:Literal>
Код элементов управления позади:
Public Class MyControl
Inherits System.Web.UI.UserControl
Public Property Data As MyData
Public Sub New()
End Sub
Public Sub New(data As MyData)
Me.Data = data
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
myLiteral.Text = Data.ID ' The Literal is null, but ONLY when I use the second LoadControl() method!
End Sub
End Class
И соответствующий код из .aspx
, из которого я пытаюсь динамически загрузить элемент управления:
Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
Dim x = LoadControl(GetType(MyControl), New Object() {New MyData With {.ID = 117}})
Page.Controls.Add(x)
' Using LoadControl("MyControl.ascx") works as expected!
End Sub