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

时间:2010-01-11 21:21:25

标签: c# asp.net listbox

大家好有问题(我发现这是一个有线问题:P)

我在asp.net c#中完成了一个订单页面,并且用户将成分添加到一组列表框中,一旦用户完成添加项目,他们就会合并制作三明治然后添加到另一个列表框中展示三明治及其成分。我还有一个按钮,允许用户从订单中删除突出显示的三明治,这一切都正常,直到页面加载一个查询字符串,跳过添加成分,只显示订单上的三明治,三明治列表框填充正常但我在单击删除按钮时出现错误

  

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

     

上   CompletedSandwiches.SelectedItem.Text

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

然后在page_load上检查

        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());

            } 

我的删除按钮代码

        bool found = false;
        int i = 0;

        while (i < sandwichOnOrder.Count || found == false)
        {


            SandwichConentent content = sandwichOnOrder[i];
            if (content.ToString() == CompletedSandwiches.SelectedItem.Text)
            {
                CompletedSandwiches.Items.Remove(CompletedSandwiches.SelectedItem);
                sandwichOnOrder.Remove(content);
                found = true;
            }
        }

有没有人知道我为什么遇到这个问题?

事先感谢马特

编辑〜对不起我忘了提及我知道我没有进行验证,但我手动检查是否在我通过之前选择了一个项目,当在调试中查看列表框时,它显然是空的,即使在视觉上它不是。

编辑2~再次抱歉此行发生错误

if (content.ToString() == CompletedSandwiches.SelectedItem.Text)

当传递?EDIT = 1时,它是来自网络应用程序主页的新页面调用

2 个答案:

答案 0 :(得分:0)

如果你的删除方法需要一个:

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

答案 1 :(得分:0)

宣布CompletedSandwiches在哪里?要么你不应该在代码隐藏中声明一个新的(因为它是在aspx中定义的),要么你将它动态地添加到页面中...并且在这种情况下不实例化它?

在ASPX中在转发器之外声明的控件在后面的代码中永远不应该为空。