Làm thế nào để bạn xây dựng một điều khiển tùy chỉnh ASP.NET với một thuộc tính bộ sưu tập?


12

Tôi đang tìm cách để làm một cái gì đó giống như

<cstm:MyControl runat="server"> 
    <myItem attr="something" /> 
    <myItem attr="something" /> 
</cstm:MyControl> 

là gì mã xương trần cần thiết để kéo giảm giá này?

dụ Rick cho thấy một cái gì đó giống như

<cstm:MyControl runat="server"> 
    <myItems> 
     <cstm:myItem attr="something" /> 
     <cstm:myItem attr="something" /> 
    </myItems> 
</cstm:MyControl> 

Tôi muốn cú pháp ngắn gọn hơn nếu có thể.

Lưu ý: Hãy đề xuất tiêu đề hoặc mô tả tốt hơn. Ngay cả khi bạn không có quyền chỉnh sửa, tôi rất vui khi chỉnh sửa bài viết vì lợi ích của cộng đồng.

  0

Tôi sẽ đề nghị thay đổi danh hiệu này để "Làm thế nào để bạn xây dựng một ASP.NET custom control với một thuộc tính collection mặc định?", vì có một vài giải thích về việc xây dựng một control với một thuộc tính collection declarative, nhưng ít giải thích làm thế nào để biến nó thành thuộc tính mặc định. 23 sep. 082008-09-23 21:10:07

17

Dưới đây là một điều khiển ví dụ thực sự đơn giản mà thực hiện chính xác những gì bạn đang tìm kiếm:

namespace TestControl 
{ 
    [ParseChildren(true, DefaultProperty = "Names")] 
    public class MyControl : Control 
    { 
     public MyControl() 
     { 
      this.Names = new List<PersonName>(); 
     } 

     [PersistenceMode(PersistenceMode.InnerDefaultProperty)] 
     public List<PersonName> Names { get; set; } 
    } 

    public class PersonName 
    { 
     public string Name { get; set; } 
    } 
} 

Và, đây là một cách sử dụng ví dụ:

<%@ Register Namespace="TestControl" TagPrefix="TestControl" %> 

<TestControl:MyControl runat="server" ID="MyControl1"> 
    <TestControl:PersonName Name="Chris"></TestControl:PersonName> 
    <TestControl:PersonName Name="John"></TestControl:PersonName> 
</TestControl:MyControl>