Vì điều khiển người dùng không thuộc trang, bạn không thể truy cập trực tiếp trừ khi bạn đặt rõ ràng thuộc tính trong điều khiển người dùng từ trang bao gồm hoặc tạo hàm đệ quy đi qua tất cả đối tượng cha cho đến khi nó tìm thấy một đối tượng thuộc loại System.Web.UI.Page
.
Đối với người đầu tiên, bạn có thể sử dụng một tài sản (Tôi đã làm điều này bằng cách sử dụng tài sản được gọi ParentForm
) trong việc kiểm soát sử dụng:
Private _parentForm as System.Web.UI.Page
Public Property ParentForm() As System.Web.UI.Page ' or the type of your page baseclass
Get
Return _parentForm
End Get
Set
_parentForm = value
End Set
End Property
Trong trang "Cha mẹ", bạn sẽ thiết lập thuộc tính này trong một sự kiện càng sớm càng tốt. Tôi thích sử dụng PreLoad vì nó đến trước khi tải (do đó có sẵn khi hầu hết các điều khiển khác sẽ cần nó) và sau init.
Protected Sub Page_PreLoad(ByVal sender as Object, ByVal e as EventArgs) Handles Me.PreLoad
Me.myUserControlID.ParentForm = Me
End Sub
Bạn cũng có thể viết một chức năng troll thông qua điều khiển chính để tìm trang. Đoạn mã sau chưa được kiểm tra để nó có thể yêu cầu tinh chỉnh, nhưng ý tưởng là âm thanh.
Public Shared Function FindParentPage(ByRef ctrl As Object) As Page
If "System.Web.UI.Page".Equals(ctrl.GetType().FullName, StringComparison.OrdinalIgnoreCase) Then
Return ctrl
Else
Return FindParentPage(ctrl.Parent)
End If
End Function
EDIT: Bạn cũng không thể truy cập trực tiếp thuộc tính này bởi vì nó không tồn tại trong loại System.Web.UI.Page
. Như @Tim Schmelter đề xuất, bạn có thể cố gắng truyền trang tới loại trang cụ thể _Default
hoặc nếu đây là điều phổ biến đối với nhiều trang của bạn, bạn có thể cần phải tạo lớp trang cơ sở và bao gồm thuộc tính của bạn trong lớp đó. Sau đó, bạn có thể kế thừa lớp này thay vì System.Web.UI.Page
Public Class MyBasePage
Inherits System.Web.UI.Page
Public Property SelectedID() as Integer
...
End Property
End Class
Sau đó, trong trang:
Partial Class _Default
Inherits MyBasePage
...
End Class
Nguồn
2010-11-04 15:00:24
Cảm ơn Tim, tôi nghe theo lời khuyên của bạn. Tôi đã thêm thuộc tính công khai vào kiểm soát của mình và đặt thuộc tính đó từ trang khi tôi tự động thêm nó! – s15199d