2010-06-10 28 views
6

Tôi đã tạo điều khiển người dùng. Nó có string[] tài sản công cộng (có thể là List<string> hoặc bất kỳ thứ gì). Tôi muốn hỗ trợ xác định thuộc tính này trong mã aspx, khi khai báo cá thể của usercontrol này. Một cái gì đó như thế này:ASP.NET danh sách điều khiển người dùng/bộ sưu tập/mảng tài sản

<uc1:MyControl ID="MyControl1" runat="server"> 
    <MyStringCollectionProperty> 
     <string>My String 1</string> 
     <string>My String 2</string> 
     <string>My String 3</string> 
    </MyStringCollectionProperty> 
</uc1:MyControl> 

Làm thế nào để nó hoạt động? Cảm ơn ...

+1

Bạn đang cố gắng để đạt được? Bạn không thể chỉ đặt thuộc tính trong mã-đằng sau? (ví dụ MyControl1.MyCollection = danh sách mới {"Foo", "Bar"};) hoặc, "runat =" server "/> – RPM1984

+0

Của cource, tôi có thể thiết lập các tài sản trong code-behind, như là" tùy chọn emeregency ". Những gì tôi muốn, là để tách khai báo giao diện người dùng khỏi logic. Về tùy chọn thứ hai của bạn ("<% = danh sách mới ..."). Nó không hoạt động, bởi vì các thẻ máy chủ không thể chứa các biểu thức "<% %>". – zhe

Trả lời

0

Bằng cách nhập giá trị biến trong đánh dấu một cách rõ ràng, theo ví dụ của bạn, bạn đang kết hợp trực tiếp giao diện người dùng với logic của mình.

Nếu các giá trị này không bao giờ thay đổi, thì không có điểm nào để đặt chúng trong đánh dấu - tốt hơn là đặt chúng vào mã kiểm soát của người dùng.

Nếu các giá trị này có thể khác nhau mỗi khi người dùng điều khiển tải, thì họ phải đến từ nguồn động, chẳng hạn như biến trạng thái phiên, biến công khai, giá trị kiểm soát, v.v. (Trong trường hợp đó, điều khiển người dùng của bạn sẽ xem chúng lên mỗi lần tải.)

Nếu các giá trị này chỉ thay đổi vào thời gian thiết kế, bạn vẫn có thể đặt chúng tải như trên, nhưng bạn có thể xem xét xây dựng 'điều khiển tùy chỉnh' trong trường hợp đó.

Dù sao, không chắc chắn chính xác những gì bạn đang cố gắng đạt được, vì vậy hy vọng một trong các tùy chọn này có thể hữu ích.

Chúc may mắn

+0

Thực ra tài sản này không được kết nối chặt chẽ với logic nghiệp vụ. Nó chỉ đại diện cho một trong các thiết lập của điều khiển người dùng này. Tuy nhiên, việc đặt thuộc tính này trong page_load giờ đây đã thỏa mãn tôi. :) Cảm ơn lời khuyên của bạn. – zhe

1

Theo tôi biết bạn không thể làm những gì bạn muốn làm với điều khiển người dùng. Bạn sẽ cần phải viết một điều khiển tùy chỉnh.

Xem Server Control Properties Example trên MSDN.

1

Dưới đây là ví dụ về cách hoàn thành những gì bạn đang yêu cầu. Các điều khiển con được đọc dưới dạng HTMLGeneric Controls, vì vậy bạn phải chuyển đổi chúng. Khi chúng được đọc, tôi chuyển đổi chúng thành lớp "StringControl" tùy chỉnh của tôi. Nếu bạn muốn sử dụng một cấu trúc nâng cao hơn, bạn chỉ có thể nâng cao hàm tạo cho chuỗi ký tự.

Partial Class UserControlStrings_MyControl 
    Inherits System.Web.UI.UserControl 

    Private _MyStringCollectionProperty As New MyUserControlStringCollectionClass(Me) 

    <PersistenceMode(PersistenceMode.InnerProperty)> 
    Public ReadOnly Property MyStringCollectionProperty As MyUserControlStringCollectionClass 
     Get 
      Return _MyStringCollectionProperty 
     End Get 
    End Property 
End Class 

Public Class MyUserControlStringCollectionClass 
    Inherits ControlCollection 

    Sub New(ByVal owner As Control) 
     MyBase.New(owner) 
    End Sub 

    Public Overrides Sub Add(ByVal child As System.Web.UI.Control) 
     MyBase.Add(New StringControl(child)) 
    End Sub 
End Class 

Public Class StringControl 
    Inherits HtmlGenericControl 

    Sub New(ByVal GenericControl As HtmlGenericControl) 
     MyBase.New() 
     Me.Value = GenericControl.InnerHtml 
    End Sub 

    Public Property Value As String = String.Empty 

    Public Overrides Function ToString() As String 
     Return Value 
    End Function 
End Class 

Sau đó, bạn có thể tìm trong "MyControl1.MyStringCollectionProperty" cho tất cả các giá trị.

6

Bạn thực sự có thể sử dụng TypeConverterAttribute để chỉ định một lớp chuyển đổi (StringArrayConverter trong trường hợp này).

0

Custom User Control and Friendly Property Item Collection (Like ListBox and ListItems, but with List<Class>) on .ASPX

bạn có thể sử dụng Bộ sưu tập và danh sách.

hãy chắc chắn để kiểm tra http://msdn.microsoft.com/en-us/library/9txe1d4x%28v=vs.100%29.aspx - nó áp dụng rất tốt để kiểm soát người dùng và vào liên kết ở trên stackoverflow tôi giải thích làm thế nào bạn có thể liên kết trong trang aspx hoặc webconfig

Các vấn đề liên quan