Ошибка нулевой ссылки при вызове метода

У меня есть метод NewBatch_GetAndSetBatchID.

Когда я вызываю этот метод в методе Page_Load, он работает отлично.

Но когда я вызываю этот метод с помощью кнопки (на той же странице), я получаю:

Null reference exeption Object reference not set to an instance of an object.

Выдает ошибку:

BatchNoTextBox.Text = (batchID += 1).ToString();

Когда я отлаживаю, я вижу, что мой batchID заполнен значением.

Это мой код:

public void NewBatch_GetAndSetBatchID()
    {
        FormView1.ChangeMode(FormViewMode.Insert);


        string connectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                SqlCommand sqlCommando = new SqlCommand("SELECT MAX(BatchNo) FROM BM_BrewBatchHeader", conn);

                try
                {
                    conn.Open();
                    batchID = Convert.ToInt32(sqlCommando.ExecuteScalar());
                }
                catch (Exception)
                {

                }
                finally
                {
                    conn.Close();
                }
            }
        }
        catch (SqlException error)
        {

        }

        try
        {
            TextBox BatchNoTextBox = (TextBox)FormView1.FindControl("BatchNoTextBox");
            BatchNoTextBox.Text = (batchID += 1).ToString();
        }
        catch (Exception)
        {
            throw;
        }
    }

В чем тут может быть проблема?

Я нашел решение на другом форуме: Мне нужно использовать триггер PreRender из FormView. С приведенным ниже кодом все работает нормально. Когда я теперь устанавливаю Formview для вставки или редактирования, код выполняется отлично.

protected void FormView1_PreRender(object sender, EventArgs e)
        {
            // if the mode is Edit or Insert
            if (this.FormView1.CurrentMode == FormViewMode.Edit || this.FormView1.CurrentMode == FormViewMode.Insert)
            {
                TextBox BatchNoTextBox = (TextBox)FormView1.FindControl("BatchNoTextBox");
                BatchNoTextBox.Text = (batchID += 1).ToString();
            }
        }

Возможный дубликат Что такое исключение NullReferenceException и как его исправить?

Uwe Keim 13.09.2018 18:47

Если проблема не в правой стороне присваивания, скорее всего, проблема заключается в левой стороне (т.е. BatchNoTextBox имеет значение NULL).

Uwe Keim 13.09.2018 18:49

Хорошо, я понимаю, но как я могу это исправить? Я немного потерялся. Извините, я новичок в программировании .. Почему мой объект равен нулю, когда я вызываю метод с помощью кнопки, а не когда я вызываю его из PageLoad

Mart Apon 13.09.2018 18:52

Можете ли вы попробовать этот `Int32 ID = Convert.ToInt32 (sqlCommando.ExecuteScalar ());` и сначала убедитесь, что он работает. `

Saif 13.09.2018 18:55

Это не работает. Я все еще получаю ту же ошибку.

Mart Apon 13.09.2018 19:01

Что такое исключение NullReferenceException и как его исправить? Хорошая статья, я могу найти там свою проблему, но не решение. Думаю, это как-то связано с жизненным циклом страницы, но я до сих пор не знаю, как это исправить @UweKeim

Mart Apon 13.09.2018 19:37

Если вы думаете, что это как-то связано с жизненным циклом страницы, вам следует объяснить, когда этот код работает, в отношении жизненного цикла. Если вы создадите правильный минимальный воспроизводимый пример, это не будет проблемой.

mason 13.09.2018 20:59

Я нашел решение на другом форуме. Я отредактировал свой вопрос и добавил найденный там ответ. Спасибо за помощь людям!

Mart Apon 13.09.2018 21:09
0
8
47
0

Другие вопросы по теме