Tôi đang thêm điều khiển người dùng web vào trang động. Sử dụng phương thức LoadControl
chỉ có đường dẫn ảo trỏ đến .ascx
hoạt động khá độc đáo. Tuy nhiên, tình trạng quá tải của LoadControl
mất một loại và một loạt các tham số gây ra cho tôi một số nhức đầu.Tải điều khiển người dùng theo lập trình bằng cách sử dụng LoadControl (Loại, đối tượng())
Điều khiển người dùng web được khởi tạo như mong đợi, nhưng các điều khiển chứa trong điều khiển người dùng web là rỗng và tôi nhận được ngoại lệ ngay khi tôi cố gắng làm việc với chúng. Lạ, vì nó hoạt động khi sử dụng phiên bản đầu tiên của LoadControl
.
Việc kiểm soát người dùng web, đơn giản, với một Literal
kiểm soát:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MyControl.ascx.vb" Inherits="MyControl" %>
<asp:Literal ID="myLiteral" runat="server"></asp:Literal>
mã điều khiển đằng sau:
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
Và mã có liên quan từ .aspx
từ mà tôi đang cố gắng để tự động tải kiểm soát:
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
Có vẻ như bạn đang gọi một hàm tạo trên một đối tượng đã được tạo - cách thức hoạt động? – jmoreno
@jmoreno Vì các hàm tạo chỉ là các phương thức tĩnh với một số hubbub phụ, nó chỉ hoạt động. –
Đây là một bản demo nhanh: http://ideone.com/IoqU2Z (mã không thành công trên hầu hết các trình biên tập trực tuyến vì nó yêu cầu một số yêu cầu bảo mật, nhưng nó chạy với sự tin tưởng đầy đủ). –