【问题标题】:Need help in understanding this error message that I'm getting需要帮助来理解我收到的此错误消息
【发布时间】:2013-06-07 03:17:22
【问题描述】:

请帮助我了解我遇到的这个错误是什么:

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

【问题讨论】:

  • 我认为如果您发布该方法,我们将能够提供更多帮助。这是一个非常常见的错误,很多事情都可能导致它。我的猜测,光看代码就是lblc[TabCount]没有初始化(new Label
  • 好的,我会更新我的帖子。
  • @passionateCoder 请查看我的帖子,我已经更新了。

标签: c# asp.net


【解决方案1】:

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

    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,因此在刷新时您将看到您的新标签。 (当页面被事件刷新时)

        Session["lblc4"] = "cool";

由于您的特定事件,该页面正在刷新过程中,因此标签消失但会话状态仍然存在,因此当您在刷新时设置会话时,代码会抓取会话而不是将其设置为默认数字。 而不是在标签刷新时更改标签的文本,您实际上是使用您设置的会话字符串生成新标签。

还要确保您的 Web.config 文件中有 &lt;sessionState mode="InProc" /&gt; &lt;system.web&gt; 请在此处阅读有关会话状态的更多信息http://msdn.microsoft.com/en-us/library/87069683(v=vs.80).aspx

【讨论】:

  • 嘿,你回来了,这与你的代码有关,正是你现在提供的那个。
  • 我们可以通过聊天继续吗?我有很多问题,希望你能帮助我。
  • 你提供的这段代码我把 for (int i = 0; i
  • 尝试将 TabCount 替换为数字 0 并查看是否出错,然后将 TabCount 替换为数字 9 并查看是否出错。
  • 当然可以聊天。刚加入c#聊天室之前没用过聊天功能。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-06
      • 2015-09-16
      • 2010-10-17
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2020-08-06
      • 2023-03-09
      相关资源
      最近更新 更多