-1

サーバーコントロールを作成しました。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]);
4

1 に答える 1

0

Datasourceプロパティでビューステートがnullかどうかを確認します。Viewstate( "Datasource")の代わりにプロパティを直接使用する限り、問題はありません。

[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
 public  string[,]  DataSource
{
    get
    {
        string[,] value = (string[,])ViewState["DataSource"];
        if (value == null) {
            return __Pages_dummy

        }
        return value ;
    }
    set
    {
        ViewState["DataSource"] = value;
    }
}
于 2013-03-07T19:07:07.710 に答える