Asp.Netカスタムコントロール開発任我行(4)-View State保存コントロール状態
9713 ワード
サマリ
前編では、コントロールのプロパティステータスを保存することを目的としたドロップダウン・ボックスの効果を実現しました.
内容
まず1つの例を見てみましょう.バックグラウンドコードは変わりません.UIページのコードだけを変更します.まず、ページに2つのコントロールをドラッグ&ドロップします.1つは私たちが今開発しているこのコントロールで、もう1つはボタンButtonです.
<body>
<form id="form1" runat="server">
<XYB:TextEdit ID="txt" DropDwonHeight="200" DropdwonWidth="200" runat="server"></XYB:TextEdit>
<asp:Button runat="server" ID="btn" Text=" " OnClick="btn_Click" />
</form>
</body>
私たちはPageでLoadの中で属性に値を割り当てて、コードは以下の通りです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace XYB.UI
{
public partial class TextEditUI : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txt.DropDwonHeight = 100;
txt.DropdwonWidth = 100;
}
}
protected void btn_Click(object sender, EventArgs e)
{
}
}
}
ブラウズを実行してみると、最初の結果は確かに100*100でしたが、ボタンをクリックすると、長さも幅も200に戻りました.つまり、属性値が保存されていません.今はTextEditを修正するだけです.csコードです.View Stateを使用してコントロールのプロパティステータス値を保存します.
using System;
using System.Text;
using System.Web.UI;
using System.ComponentModel;// ( )Attribute;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
namespace XYB.Controls
{
public class TextEdit:TextBox
{
private int _dropDwonHeight;
private int _dropdwonWidth;
[Description(" "),//
Category(" ")//
]
public int DropDwonHeight
{
// DropDwonHeight , 50
get { return ViewState["DropDwonHeight"] == null ? 150 : Convert.ToInt32(ViewState["DropDwonHeight"]); }
set { ViewState["DropDwonHeight"] = value; }
}
[Description(" "),
Category(" ")
]
public int DropdwonWidth
{
get { return ViewState["DropdwonWidth"] == null ? 150 : Convert.ToInt32(ViewState["DropdwonWidth"]); }
set { ViewState["DropdwonWidth"] = value; }
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Panel pnlDropDown = new Panel();
pnlDropDown.ID = "pnlDropDownID";
pnlDropDown.Height = DropDwonHeight;
pnlDropDown.Width = DropdwonWidth;
pnlDropDown.Style["border"] = "1px solid #ccc";//
pnlDropDown.RenderControl(writer);//
}
}
}
コントロールを再生成して実行し、ok、ページが返信されたときも属性値は変わりません.
に注意
ViewStateはこのページでのみ有効です.たとえば、AページにViewState["A"]がある場合、BページではViewState["A"]がnullになります.
次回予告
カスタムコントロールにリソースを埋め込み、後でどうなるかを予知します.次回の分解を見てください.私に注目してください!!