2009-03-23 16 views
13

ASP.NETでユーザーコントロールを使用してカスタムタグを定義することは可能です。しかし、私が知る限り、これらのコントロールに属性を追加することしかできません。より複雑なデータを埋め込むことができるようにしたいと思います。カスタム子要素を持つASP.NETのカスタム要素

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

これはASP.NETで可能ですか?私はリストビューを拡張しようとする必要がありますか?それとももっと良い解決策がありますか?

答えて

17

確かに可能です。あなたの例のためのクラスは次のようになります。

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

そして、実際のマークアップは次のようになります。

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

ありがとうございました..手作りのサーバーコントロールに関するすべての専門用語で、まっすぐ答えを得ることは本当に難しいです。後天性では内部の要素をプロパティとして扱い、それ以外のものは多くの意味をなさない。乾杯! – CResults

0

あなたはこのようなpurpocesため、ユーザのUserControlすることはできません。上でアドバイスされているように、ControlまたはWebControlを継承します。

+0

なぜ矛盾する回答が投稿されましたか? – 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> 
関連する問題