1

私が得ているこのエラーが何であるかを理解するのを手伝ってください:

ここに画像の説明を入力

lblTabCounter は aspx ページでコード化されたラベルであり、lblc[index] はページの読み込み中に実行時に作成されるラベルのコレクションです。

ページ読み込み以外の宣言:

Label[] lblc = new Label[10];

内部ページ読み込みイベント:

for (int i = 0; i < 10; i++)
                {
                    lblc[i] = new Label() { Text = (i + 1).ToString() };
                    this.Controls.Add(lblc[i]);
                }

NodeChanged と呼ばれる別のイベント内:

int TabCount = Convert.ToInt32(lblTabCounter.Text.ToString());
                int TabIndex = Convert.ToInt32(lblTabCounterIndex.Text.ToString());
                if(TabCount <= 10)
                {
                    divcont.Visible = true;
                    string tabName = getURLName(uRL);

                    MenuItem myItem = new MenuItem(tabName, TabIndex.ToString());
                    Menu1.Items.AddAt(TabIndex, myItem);
                    //f1.Attributes["src"] = url;
                    f1.Attributes.Add("src", lblURL.Text.ToString());
                    MultiView1.ActiveViewIndex = TabIndex;
                    lblc[TabCount].Text = lblTabCounter.Text;
                    lblc[TabCount + 1].Text = lblURL.Text;
                    TabCount++;
                    TabIndex++;
                    lblTabCounter.Text = TabCount.ToString();
                    lblTabCounterIndex.Text = TabIndex.ToString();
                    tvPermissions.ExpandAll();
                    //tvPermissions.CollapseAll();
                    int i = ctr;
                }

注: これはすべて site.master 内にあります。

4

3 に答える 3

0

このコード行には、次の 2 つの問題が考えられます。

  • lblc[TabCount]無効です。
  • lblTabCount無効です。

デバッガーで一時停止しているため、これらのどれが該当するかを確認し、残りのコードを調べて理由を見つけることができます。

于 2013-06-07T03:22:50.697 に答える
0

問題は、Web ページが更新され、ラベルの状態が失われることです。

    Label[] lblc = new Label[10];
    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 10; i++)
        {
            lblc[i] = new Label();
            this.Controls.Add(lblc[i]);
            if (Session["lblc" + i.ToString()] == null)
                Session["lblc" + i.ToString()] = lblc[i].Text = (i + 1).ToString();
            else
                lblc[i].Text = (string)Session["lblc" + i.ToString()];
        }

次に、ラベルを設定する場合は、次を使用します(ページがイベントによって更新されていない場合)

        lblc[4].Text = "cool";
        Session["lblc4"] = "cool";

ただし、クリックイベントがページを更新しているため、lblc との接続が失われるため、セッションのみを設定して、更新時に新しいラベルが表示されるようにします。(イベントによるページ更新時)

        Session["lblc4"] = "cool";

特定のイベントの結果としてページが更新中であるため、ラベルは消えますが、セッション状態は維持されるため、更新時にセッションを設定すると、コードはデフォルトの番号に設定する代わりにセッションを取得します。更新時にラベルのテキストを変更するのではなく、設定したセッション文字列で実際に新しいラベルを生成しています。

また<sessionState mode="InProc" />、Web.config ファイルにあることを確認してください。<system.web> こちらのセッション状態の詳細をお読みくださいhttp://msdn.microsoft.com/en-us/library/87069683(v=vs.80).aspx

于 2013-06-07T03:23:23.127 に答える