2009-12-01 32 views

Trả lời

7
[PersistChildren(false)] 
[ParseChildren(true, "Text")] 
public partial class RequiredFieldMarker : UserControl, ITextControl 
{ 
    [Category("Settings")] 
    [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)] 
    public string Text 
    { 
     get 
     { 
      return lblName.Text; 
     } 
     set 
     { 
      lblName.Text = value; 
     } 
    } 
} 
2

Có một tài sản trên điều khiển người dùng của bạn được gọi là Text, và thiết lập đó như

<uc:My id="my" Text="some text" runat="server">Text</uc:My> 

hoặc phía máy chủ

my.Text = "some text"; 
1

Giả sử các UC tạo ra một bảng, phương pháp đơn giản nhất tôi có thể nghĩ đến là này:

Trong ascx của UserControl, hãy làm như sau:

<table> 
    <tr> 
    .... 
    <td><asp:Literal runat="server" ID="ltCellContent" /></td> 
    .... 
    </tr> 
</table> 

Trong mã của UserControl đằng sau:

public string CellContent 
{ 
    get { return ltCellContent.Text; } 
    set { ltCellContent.Text = value; } } 
} 

Và để sử dụng nó:

<uc:My runat="server" CellContent="Some content" /> 
+0

Yea, đây là cách dễ dàng nhất. Nhưng tôi muốn hiểu cách thực hiện nhiệm vụ đúng cách. Giống như asp: Label. – abatishchev

+2

@abatishchev: Trong trường hợp đó, bạn cần xem xét cách điều khiển tùy chỉnh được tạo; Tôi khuyên bạn nên "Phát triển Microsoft ASP.NET Server điều khiển và thành phần" của Nikhil/Datye, V. Kothari. – pbz

+0

Khi tôi thử điều này, tôi nhận được 'ltCellContent không tồn tại trong ngữ cảnh hiện tại'. –

1

Chỉ cần thêm một dòng trước lớp ([ParseChildren (true, "TestInnerText")]) và thêm thuộc tính có tên "TestInnerText". Tạo bất kỳ điều khiển nào bạn chọn, tôi đã tạo LiteralControl chỉ để hiển thị chế độ xem html bên trong.

"TestInnerText" - chỉ là tên tạm thời tôi đã cung cấp, bạn có thể sử dụng bất kỳ tên thuộc tính nào do bạn chọn.

Do sự thay đổi sau trong tập tin my.aspx.cs,

[ParseChildren(true, "TestInnerText")] 
public partial class My : UserControl 
{ 
    public string TestInnerText 
    { 
     set 
     { 
      LiteralControl lc = new LiteralControl(); 
      lc.Text = value; 
      this.Controls.Add(lc); 
     } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
Các vấn đề liên quan