2009-03-23 8 views
13

Je sais qu'il est possible de définir des balises personnalisées dans ASP.NET avec des contrôles utilisateur. Mais autant que je sache, vous pouvez seulement ajouter des attributs à ces contrôles. Je voudrais être en mesure d'intégrer des données plus complexes, un peu Lite ceci:Éléments personnalisés dans ASP.NET avec des éléments enfants personnalisés

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

Il ce possible dans ASP.NET? Dois-je essayer d'étendre un ListView? Ou y at-il une solution meilleure et plus correcte?

Répondre

17

C'est certainement possible. Pour votre exemple les classes ressemblerait à ceci:

[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; } 
} 

Et le balisage réel serait:

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

Merci pour cela .. Il est vraiment difficile avec tout le jargon concernant les contrôles serveur construits à la main pour obtenir une réponse directe. En rétrospective, traiter les éléments intérieurs comme des propriétés et, en plus, cela a beaucoup de sens. À votre santé! – CResults

0

Vous ne pouvez pas UserControl utilisateur pour ces purpoces. Comme indiqué ci-dessus, hériter de Control ou WebControl.

+0

Pourquoi avez-vous des réponses contradictoires affichées? – 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> 
Questions connexes