Как сохранить класс после нажатия кнопки на странице - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть страница в 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 ​​ станет нулевым, и я получу ошибку Объект не определен , есть ли способ сохранить Значения класса?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

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

1 голос
/ 21 февраля 2020

Вам необходимо повторно получить объект 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, поэтому , вероятно, не сериализуем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...