Как сохранить класс после нажатия кнопки на странице

У меня есть страница в ASP.NET, где при доступе к ней программно я устанавливаю значение в TextBox. Когда я нажимаю кнопку, я хотел бы обновить это значение, но выдает ошибку:

Объект не определен

Вот мой код:

public partial class InsertValues : System.Web.UI.Page
    {
        DataProvider dataProvider = new DataProvider(); // This class contains all the querys I need to pull data

        public MyValuesClass myValues; // This is my class where I get the data from my DB

        protected void Page_Load(object sender, EventArgs e)
        {   
            if (!IsPostBack)
            {      
                startMyPage();  // Function that gets the values from the DataBase and sets my TextBox with the values.
            }
            else
            {

            }
        }

private void startMyPage()
        {
            myValues = dataProvider.getValuesFromDB(); // Function that gets the values from a query and put them in my class, the values are. String "Banana" and Bool isNew = True

            if (!myValues.isNew) // 
            {
                txtFood.Text = myValues.food
            }
            else
            {
                myValues= new myValues();
                myValues.isNew = true;
            }
        }

protected void btnSave_Click(object sender, EventArgs e)
        {
            if (myValues.isNew) // Object not defined. 
            {
                 dataProvider.addMyValues(myValues); // It Inserts into my DB
            }
            else
            {
                 dataProvider.editMyValues(myValues); // It Updates into my DB
            }
        }
    }

По сути, после того, как я нажму на кнопку «btnSave», класс myValues станет нулевым, и я получу сообщение об ошибке Объект не определен. Есть ли способ сохранить значения класса?


person ChangeWorld    schedule 21.02.2020    source источник


Ответы (2)


Вам нужно обновить объект myValues в PostBack.

protected void Page_Load(object sender, EventArgs e)
{   
    if (!IsPostBack)
    {      
        startMyPage();
    }
    else
    {
        myValues = dataProvider.getValuesFromDB();
    }
}

Только данные, хранящиеся в ViewState или эквивалентном механизме сохраняемости, будут храниться между начальной загрузкой страницы и обратными сообщениями, поэтому значения элементов управления вашей страницей веб-форм сохраняются, а ваш код позади свойства — нет.

Вы можете хранить вещи вручную в ViewState следующим образом: ViewState["someKey"] = someObject;, но someObject должен быть сериализуемым. Похоже, что myValues является объектом ORM, поэтому он вероятно не сериализуем.

person Erresen    schedule 21.02.2020
comment
Да, я пропустил эту часть, очень благодарен. Я хотел бы спросить вас еще только об одном: Только данные, хранящиеся в ViewState или эквивалентном механизме сохранения, будут храниться между начальной загрузкой страницы и обратными сообщениями Я хотел бы узнать кое-что больше, не могли бы вы дайте мне ссылку? Было бы здорово. - person ChangeWorld; 21.02.2020
comment
Рад помочь. У меня нет конкретных ссылок. Попробуйте поискать в Google сохраняемые данные в ASP .NET WebForms, ViewState и ASP .NET Sessions. - person Erresen; 21.02.2020

Все переменные повторно инициируются при каждом обратном сообщении. вам лучше хранить свой класс public MyValuesClass myValues в сеансе или состоянии просмотра.

person Ravindra    schedule 24.02.2020