需要帮助来理解我收到的此错误消息

时间:2013-06-07 03:17:22

标签: c# asp.net

请帮助我理解我得到的错误是什么:

enter image description here

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中。

3 个答案:

答案 0 :(得分:0)

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

  • lblc[TabCount]为空。
  • lblTabCount为空。

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

答案 1 :(得分: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

答案 2 :(得分:0)

我会遵循lblc [index]数组的路径来确定元素偏移是否在范围内以及它是否正确创建而不是以null结尾(无论null是对象lblc [index]或被引用的文本属性。