2009-03-23 15 views
13

ASP.NET'te Kullanıcı Denetimleri ile özel etiketler tanımlamanın mümkün olduğunu biliyorum. Ancak bildiğim kadarıyla sadece bu kontrollere nitelikler ekleyebilirsiniz. ASP.NET'teÖzel alt öğelerle ASP.NET'teki özel öğeler

<myControls:MyGraph id="myGraph1" runat="server"> 
    <colors> 
    <color>#abcdef</color> 
    <color>#123456</color> 
    </colors> 
</myControls:MyGraph> 

Bu mümkün: Daha karmaşık verilerin, bu lite biraz katıştıramayacağınızı istersiniz? ListView'i genişletmeye çalışmalı mıyım? Ya da daha iyi ve daha doğru bir çözüm var mı?

cevap

17

Bu kesinlikle mümkündür. senin Örneğin sınıfları gibi görünecektir:

[ParseChildren(true)] 
class MyGraph : WebControl { 
    List<Color> _colors = new List<Color>(); 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public List<Color> Colors { 
     get { return _colors; } 
    } 
} 

class Color { 
    public string Value { get; set; } 
} 

Ve gerçek biçimlendirme olacaktır: Böyle purpoces için

Yapamazsın
<myControls:MyGraph id="myGraph1" runat="server"> 
    <Colors> 
    <myControls:Color Value="#abcdef" /> 
    <myControls:Color Value="#123456" /> 
    </Colors> 
</myControls:MyGraph> 
+0

Bunun için teşekkürler ... El ile yapılan sunucu denetimleriyle ilgili tüm jargonların düz bir yanıt alması gerçekten zor. Geçmişte içsel unsurları birer özellik olarak ele alır ve başka bir şey yapmaz. Şerefe! – CResults

0

kullanıcı UserControl. Yukarıda belirtildiği gibi, kontrol veya WebControl devralın.

+0

Neden birbiriyle çelişen cevaplar gönderiyorsunuz? – cchamberlain

3
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 

namespace ComponentDemo 
{ 
    [ParseChildren(true)] 
    public class MyGraph : System.Web.UI.WebControls.WebControl 
    { 
     private List<Color> _colors; 

     public MyGraph() : base() { ;} 

     [PersistenceMode(PersistenceMode.InnerProperty)] 
     public List<Color> Colors 
     { 
      get 
      { 
       if (null == this._colors) { this._colors = new List<Color>(); } 
       return _colors; 
      } 
     } 
    } 

    public class Color 
    { 
     public Color() : base() { ;} 
     public string Value { get; set; } 
    } 
} 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ComponentDemo._Default" %> 
<%@ Register Assembly="ComponentDemo" Namespace="ComponentDemo" TagPrefix="my" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <my:MyGraph runat="server"> 
      <Colors> 
       <my:Color Value="value1" /> 
       <my:Color Value="value2" /> 
       <my:Color Value="value3" /> 
       <my:Color Value="value4" /> 
      </Colors> 
     </my:MyGraph> 
    </div> 
    </form> 
</body> 
</html> 
İlgili konular