我正在動態地將Web用戶控件添加到頁面。使用LoadControl
方法只需要一個指向.ascx
的虛擬路徑就能很好地工作。然而,LoadControl
的過載需要一個類型和一個參數數組,這使我很頭痛。使用LoadControl(Type,Object())以編程方式加載用戶控件
Web用戶控件按預期方式實例化,但Web用戶控件中包含的控件爲空,只要我嘗試使用它們,就會收到異常。奇怪,因爲它使用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
看起來你正在調用已經創建的對象的構造函數 - 這是如何工作的? – jmoreno 2016-05-19 01:04:07
@jmoreno由於構造函數只是一些額外的喧囂的靜態方法,它只是工作。 – 2017-05-04 10:29:57
下面是一個快速演示:http://ideone.com/IoqU2Z(大多數在線編輯器的代碼失敗,因爲它需要一些安全需求,但它完全信任)。 – 2017-05-04 10:41:12