Listbox имеет значение null при передаче строки запроса и обработке данных при загрузке - PullRequest
0 голосов
/ 12 января 2010

Привет, ребята, есть проблема с проводной связью (ну, я считаю, что это проблема с проводной связью: 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;
            }
        }

Кто-нибудь знает, почему у меня такая проблема?

заранее спасибо Мэтт

edit ~ извините, я забыл упомянуть, я знаю, что я не включил проверку, но я проверяю вручную, что перед передачей выбран элемент, и при просмотре списка в отладке он, по-видимому, нулевой, хотя визуально это не так.

edit 2 ~ еще раз извините, ошибка появляется в этой строке

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

и когда? EDIT = 1 передается, это новый вызов страницы с главной страницы веб-приложения

Ответы [ 2 ]

0 голосов
/ 12 января 2010

Где объявляется заполненный сэндвич? Либо вы объявляете новый в коде позади, когда вы не должны (потому что он определен в aspx), либо вы динамически добавляете его на страницу ... и в этом случае не создаете его экземпляр?

Элемент управления, который объявлен вне ретранслятора в ASPX, никогда не должен быть нулевым в коде позади.

0 голосов
/ 12 января 2010

Вам нужен, если в вашем методе удаления:

if (CompletedSandwiches.SelectedItem.Text != null)
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...