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

该行代码有两个可能的问题:

  • lblc[TabCount]一片空白。
  • lblTabCount一片空白。

由于您在调试器中暂停,您可以查看其中的情况,然后查看其余代码以找出原因。

于 2013-06-07T03:22:50.697 回答
0

问题是您的网页正在刷新并丢失标签的状态。

    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 回答
0

我将按照 lblc[index] 数组的路径来确定元素偏移量是否在范围内以及它是否被正确创建并且不会以 null 结束(无论 null 是对象 lblc[index] 还是文本属性)被引用。

于 2013-06-07T03:29:22.273 回答