C# 传递查询字符串并处理加载数据时,Listbox为null

C# 传递查询字符串并处理加载数据时,Listbox为null,c#,asp.net,listbox,C#,Asp.net,Listbox,大家好,我发现这是一个有线问题:p 我在asp.net c中创建了一个订单页面,用户将配料添加到一组列表框中,一旦用户和项目添加完毕,他们将组合成一个三明治,然后添加到另一个显示三明治及其配料的列表框中。我还有一个按钮,允许用户从订单中删除突出显示的三明治,这一切都可以正常工作,直到页面加载了一个查询字符串,该字符串跳过添加配料,只在订单上显示三明治,三明治列表框填充良好,但单击删除按钮时出现错误,这是错误的 System.NullReferenceException:对象引用未设置为对象的实例

大家好,我发现这是一个有线问题:p

我在asp.net c中创建了一个订单页面,用户将配料添加到一组列表框中,一旦用户和项目添加完毕,他们将组合成一个三明治,然后添加到另一个显示三明治及其配料的列表框中。我还有一个按钮,允许用户从订单中删除突出显示的三明治,这一切都可以正常工作,直到页面加载了一个查询字符串,该字符串跳过添加配料,只在订单上显示三明治,三明治列表框填充良好,但单击删除按钮时出现错误,这是错误的

System.NullReferenceException:对象引用未设置为对象的实例

在 CompletedSandwiches.SelectedItem.Text

唯一的区别是我传递了一个查询字符串?EDIT=1

然后在页面上我检查

        if (!Page.IsPostBack)
        {
            if ((Request.QueryString["EDIT"] != null) && (Request.QueryString["EDIT"] == "1"))
            {

                GetCurrentSandwiches();
            }

            RemoveFilling.Enabled = false;
            RemoveCondiment.Enabled = false;
            CID = int.Parse(Session["CID"].ToString());

        }
GetCurrentSandwiches执行以下操作:

 protected void GetCurrentSandwiches()
        {
            sandwichOnOrder.Clear();

            OrderManagement order = new OrderManagement();

            List<SarnieIngredients> bob = order.GetSandwichesOnOrder(int.Parse(Session["OID"].ToString()));
            List<int> ingredientIDs = new List<int>();


            foreach (SarnieIngredients sarnie in bob)
            {
                List<Ingredients> batchOfIngredients = new List<Ingredients>();
                double amount = 0.00;
                ingredientIDs = sarnie.IngredientIDs;
                foreach (int i in ingredientIDs)
                {
                    Ingredients contents =  ingredient.GetDesiredIngredientByID(i);

                    batchOfIngredients.Add(contents);
                    amount += contents.Price;
                }

                SandwichConentent sandwich = new SandwichConentent(batchOfIngredients, amount);
                sandwichOnOrder.Add(sandwich);

                CompletedSandwiches.Items.Add(sandwich.ToString());

            } 

当通过?EDIT=1时,这是来自web应用程序主页的新页面调用

如果在删除方法中:

if (CompletedSandwiches.SelectedItem.Text != null)
 ...

完整的三明治在哪里申报?要么你在代码隐藏中声明一个新的,而你不应该这样做,因为它是在aspx中定义的,要么你将它动态添加到页面中。。。在这种情况下,不实例化它


在ASPX中继器外部声明的控件在代码隐藏中不应为空。

需要更多信息。到底是哪行代码引发了异常?此外,您的问题还不清楚此EDIT=1请求是新请求还是回发?哦,是的,很抱歉我忘了输入,我没有输入任何验证,但我确保在单击Remove时在列表框中选择了一个项目。您应该调试代码并确保这一点。抛出一个watch语句,并在watch中添加变量highest level。然后展开变量并确保确实有文本。是的,我很抱歉没有在帖子中提到这一点,但现在已经编辑了。谢谢你提醒我,我猜我现在很困惑,你已经调试了它,它显示了它的值,但它抛出了一个异常,这不可能。它在哪里抛出这个错误,或者什么时候抛出异常?抱歉,不抱歉当网页正在加载数据时,数据被填充到列表框中,然后在列表框上正确显示,然后我单击删除按钮,该按钮附加了一个断点,并将列表框显示为空,因此显示错误。很抱歉给你带来了混乱
if (content.ToString() == CompletedSandwiches.SelectedItem.Text)
if (CompletedSandwiches.SelectedItem.Text != null)
 ...