サーバーコントロールを作成しました。test.aspxコードを以下に示します。
dllがロードされると、RenderContents()
関数が呼び出されます。
DataSourceプロパティへの転送を制御しますが、をViewState["DataSource"]
返しますnull
。
それを避けるために、私はViewState["DataSource"]
-を使用して初期化しました
ViewState["DataSource"] = _Pages_dummy;
私の質問は-初期化を使用したくない場合、値ViewState["DataSource"]
を返さないようにする別の方法はありnull
ますか?
=================================== =============== ================================
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ServerControl2
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
public class ServerControl1 : WebControl
{
private string[,] _Pages_dummy= { {"1","2","3","4"} , {"11","22","33","44"}};
public ServerControl1()
{
ViewState["DataSource"] = _Pages_dummy;
// if user do not initialize viewstate , we use dummmey array .
}
public ServerControl1(string[,] pages)
{
ViewState["DataSource"] = pages;
// user must initialize viewstate .
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string[,] DataSource
{
get
{
return (string[,])ViewState["DataSource"];
}
set
{
ViewState["DataSource"] = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.WriteBeginTag("div");
if (DataSource != null)
{
for (int i = 0; i < DataSource.GetLength(0); i++)
{
for (int j = 0; j < DataSource.GetLength(1); j++)
{
}
}
}
} // RenderContents
}// class
}// namespace
test.aspx.cs
ServerControl2.ServerControl1 n1 = new ServerControl2.ServerControl1();
n1.DataSource[0,0] = "hjkhjk";
n1.DataSource[0,1] = "jkljk";
n1.DataSource[0,2] = "hjk";
n1.DataSource[0,3] = "fjgfjhhgj";
Response.Write(n1.DataSource[0,0]);
Response.Write(n1.DataSource[0,1]);
Response.Write(n1.DataSource[0,2]);
Response.Write(n1.DataSource[0,3]);