asp.Netコントロール開発(二)-単純属性

3933 ワード

私たちが開発したコントロールは、一般的にコントロールを使用するプログラミング担当者と対話する必要があります.その中で、インタラクションには2つの方法があります.1つは属性とイベントです.プロパティは、int、stringなどの単純なタイプであり、あまり複雑ではないタイプでもあります.コレクションなどの複雑なタイプもあります.
一、属性実現インタラクション
プロパティPicShowの例を上記の例に従って追加します.public class PicShow : Control
{
private string _imgUrl;
//
public virtual string ImgUrl
{
get
{
return this._imgUrl;
}
set
{
this._imgUrl = value;
}
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
//Create Img Tag
writer.AddAttribute(HtmlTextWriterAttribute.Src, this.ImgUrl);
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "80px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "80px");
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
//End Of Div
writer.RenderEndTag();
}
}

上の例では、前回のコントロールを変更して死を指定するしかありません.
画像
ああ、これで画像のアドレスはコントロールの使用者が自分で指定することができます.コントロールには、属性ImgUrlによって値を設定するプライベートフィールドが定義されています.属性を書き換えることができるため、virtualタイプとして定義されています.ここでの属性定義は一般クラスの定義と同じであり,あまり説明しない.
二、ビューの状態
次は私たちが
プロジェクト
でこのコントロールを適用しますが、このようなコントロールのプロパティの状態は維持できません.つまり、それは永遠に私たちが最初に与えた値を維持するしかありません.
例を挙げます.http://www.w3.
org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml">
  
ImgUrl="Images/1109508867.jpg">
      onclick="btnChange_Click" />

protected void btnChange_Click(object sender, EventArgs e)
{
if (this.psDemo.ImgUrl == "Images/1109508867.jpg")
this.psDemo.ImgUrl = "Images/bg.jpg";
else
this.psDemo.ImgUrl = "Images/1109508867.jpg";
}
, 。 , http , 。
。 : , 。

ビューステータスは、スクリプトに「_VIEWSTATE」という非表示ドメインに保存され、前回のユーザーリクエストの保存が実現されます.ビューステータスは、集合(ViewState)です.
PicShowを継承しますpublic class viewStatePic : PicShow
{
public override string ImgUrl
{
get
{
string strImgUrl = (string)ViewState["ImgUrl"];
return (strImgUrl == null) ? String.Empty : strImgUrl;
}
set
{
ViewState["ImgUrl"] = value;
}
} 
}

ここではImgUrlを書き換えただけで,ビューの状態によって実現され,これにより前回のユーザの要求を維持することができる.
三、コントロールの状態
ユーザがビューステータスの使用を禁止している場合(EnableView State=「false」を追加する)、ユーザの前回の要求を維持できない場合、コントロールステータスによって永遠に維持できることがわかります.
コントロールの状態を維持するには、一般的に3つのステップに分けられます.
1、Pageを通す.RegisterRequiresControlState()
方法
をクリックして、コントロールが実行されているページを通知し、コントロールをコントロール状態に維持します.
2.SaveControlState()メソッドを書き換えてコントロール状態の値を保存します.
3、最後にコントロールの状態の値を属性に戻します.
コントロールのステータスの例:public class ControlStatePic : Albumn
{
protected override void OnInit(EventArgs e)
{
Page.RegisterRequiresControlState(this);
base.OnInit(e);
}
protected override object SaveControlState()
{
return this.ImgUrl;
}
//
protected override void LoadControlState(object savedState)
{
this.ImgUrl = savedState as string;
}
}

注意点は、OnInitメソッドを書き換えるときに追加する必要があるだけです.
機能
、コントロールステータスを登録するのでbaseを呼び出す必要があります.OnInit(e)メソッドは、以前の初期化作業を保存します.