最も簡単なWebコントロールを作る

6992 ワード

原文:劉武|簡単なwebコントロールを作る
前回はasp.Netサーバコントロールのライフサイクルについて知りましたが、本編では最も簡単な例を作ります.
まず新しいプロジェクトを作りますNet.WebControlsは、私のすべてのカスタムコントロールを保存するために使用されます.
次に、プロジェクトを右クリックし、「追加」>「新規」を選択します.ここでは、Webカスタムコントロールを選択し、MyHyperLinkと名前を付けます.このコントロールは、Welcome To Liuwu.Netのようなハイパーリンクになります.
Visual Studioでは、次のテンプレートが生成されます.
C#-Code:
namespace Liuwu.Net.WebControls
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:MyHyperLink runat=server></{0}:MyHyperLink>")]
    public class MyHyperLink : WebControl
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }
 
            set
            {
                ViewState["Text"] = value;
            }
        }
 
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

document.getElementById('snippet_42').style.display='block';
まだ分からないことが多いですが、大丈夫です.コントロール開発の最終目的はHTMLコードをクライアントに出力することであり、RenderContentsメソッドはこのタスクを完了することです.上のハイパーリンクを見てみると、彼女のHTMLコードはhttp://www.liuwu.net"target="_blank">Welcome To Liuwuであるべきではないか.Netは、RenderContentsメソッドにこのコードを入力すればいいです.
以下に、実装方法を示します.
C#-Code:
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyHyperLink runat=server></{0}:MyHyperLink>")]
public class MyHyperLink : WebControl
{
 
    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write("<a href=\"http://www.liuwu.net\""+
            "target=\"_blank\">Welcome To Liuwu.Net</a>");
    }
}

document.getElementById('snippet_43').style.display='block';
ここではHtmlTextWriterのWriteメソッドを用いてHTMLコードを直接出力している(表示の便宜上、ここでは文字列を分解している).
このプロジェクトをコンパイルし、Webサイトを追加すると、ツールバーに先ほど作成したコントロールが表示され、直接ページにドラッグすると使用できます.具体的な手順は面倒ではありません.
この方法に加えて、サーバコントロールのRenderControlメソッドを使用してコントロールを出力することもできます.
C#-Code:
HtmlGenericControl a = new HtmlGenericControl("a");
a.Attributes.Add("href", "http://www.liuwu.net");
a.Attributes.Add("target", "_blank");
a.InnerText = "Welcome To Liuwu.Net";
a.RenderControl(output);

document.getElementById('snippet_44').style.display='block'; ここではSystemを導入することに注意する.Web.UI.HtmlControlsネーミングスペースは、最初の方法に比べて、この方法は明らかに間違いやすいわけではありませんが、完璧ではありません.
次に、3つ目の方法について説明します.
C#-Code:
output.AddAttribute(HtmlTextWriterAttribute.Href,
                                 "http://www.liuwu.net");
output.AddAttribute(HtmlTextWriterAttribute.Target, "_blank");
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write("Welcome To Liuwu.Net");
output.RenderEndTag();

document.getElementById('snippet_45').style.display='block'; ここではHtmlTextWriterAttributeとHtmlTextWriterTagの列挙をそれぞれ用い,エラーの可能性をさらに回避した.ただし、ラベルに属性を追加する場合は、RenderBeginTagメソッドの前にAddAttributeメソッドを呼び出す必要があります.
 
参照:厨丁解牛:縦にASPを切り込む.NET 3.5コントロールとコンポーネント開発技術