点击页面按钮后如何保持class

How to maintain class after button click on page

我在 ASP .NET 中有一个页面,当我访问它时,我以编程方式在 TextBox 中设置了一个值。当我点击按钮时,我想更新那个值,但它给我错误:

Object not defined

这是我的代码:

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" 后,class myValues 变为空,我收到错误消息 Object not defined ,有没有办法保持 class 值?

您需要在 PostBack 上重新获取 myValues 对象。

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

只有存储在 ViewState 或等效持久性机制中的数据将保留在初始页面加载和 post 返回之间,这就是为什么您的 webforms 页面控件的值被持久化,但您的代码隐藏 属性 不是。

您可以像这样在 ViewState 中手动存储内容:ViewState["someKey"] = someObject;,但 someObject 必须是可序列化的。看起来 myValues 是一个 ORM 对象,所以它 可能 不可序列化。

所有变量在每 post 后重新启动。您最好将 class public MyValuesClass myValues 存储在会话或视图状态中。