Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过回发持久化对象 问题_C#_Asp.net_Post - Fatal编程技术网

C# 通过回发持久化对象 问题

C# 通过回发持久化对象 问题,c#,asp.net,post,C#,Asp.net,Post,我需要通过ASP页面上的PostBack来维护动态创建的表的状态 细节 当用户访问页面时,将根据数据库中存储的信息创建一个复选框表。基本上,这些复选框在网格中排列,根据数据库中的信息进行选中/取消选中和启用/禁用。它们也有颜色编码,但这并不相关 网格的尺寸和复选框的状态在Page\u Load中确定。我有一个名为DisplayWell的类,它只是一个包含复选框的TableCell。页面本身有一个空的表,我循环并添加DisplayWells。然后,用户可以编辑复选框的状态和一些文本字段,然后单击按

我需要通过ASP页面上的
PostBack
来维护动态创建的表的状态

细节 当用户访问页面时,将根据数据库中存储的信息创建一个复选框表。基本上,这些复选框在网格中排列,根据数据库中的信息进行选中/取消选中和启用/禁用。它们也有颜色编码,但这并不相关

网格的尺寸和复选框的状态在
Page\u Load
中确定。我有一个名为
DisplayWell
的类,它只是一个包含复选框的
TableCell
。页面本身有一个空的
,我循环并添加
DisplayWell
s。然后,用户可以编辑复选框的状态和一些
文本字段
,然后单击按钮保存

问题是,正如我相信你所知道的,这些动态创建的对象在
页面加载后消失了:服务器将它们交给客户端,它们就被销毁了。我需要能够保留表或对象数组的状态,以便能够更新数据库

到目前为止,我一直使用隐藏字段来存储我需要在回发中持久化的信息,但只存储一个或两个变量,这在这种情况下确实不起作用(通常我们谈论的是96个复选框,但它可以是任何数字)。我已经读到,您可以将对象存储在会话变量中,但是对象的状态会注册在客户端所做的更改吗?我也听说这是个坏主意

编辑: 测试之后,更改没有注册-我从会话变量中获得了相同的数组

FWIW,这里是
页面加载

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {                
        if (Request.QueryString["Plate_INDEX"] != null &&
            Request.QueryString["Block_INDEX"] != null)
        {
            String sPIndex = Request.QueryString["Plate_INDEX"].ToString();
            String sBIndex = Request.QueryString["Block_INDEX"].ToString();
            if(-1 != Block_INDEX)
            {
                lblExpPlate.Text = "Edit a Solution";
                populateFields();
            }
            hfPlate_INDEX.Value = Plate_INDEX.ToString();
            hfBlock_INDEX.Value = Block_INDEX.ToString();                        
            createPlate();
            addToTable();                
        } // end queryString != null
    }
} // end Page_Load

private void createPlate()
{
    MTT_Plate_IO mpio = new MTT_Plate_IO();
    SqlDataReader plateReader = mpio.Get_Plate(Plate_INDEX);

    if (plateReader.Read())
    {
        r = (int)plateReader["Plate_Rows"];
        c = (int)plateReader["Plate_Columns"];
        hfPlate_INDEX.Value = plateReader["Plate_INDEX"].ToString();
        dwArr = new DisplayWell[r, c];
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                dwArr[i, j] = new DisplayWell();
                dwArr[i, j].cb.Checked = false;
                dwArr[i, j].cb.Enabled = true;
            }
        } // end creation of plate                
    } // end plateReader
} //end createPlate();


private void addToTable()
{
    // create a header for the table
    TableRow header = new TableRow();
    TableHeaderCell blankCell = new TableHeaderCell();
    header.Cells.Add(blankCell); //blank cell to align with data

    // add numbers to top of plate
    for (int i = 1; i <= c; i++)
    {
        TableHeaderCell thc = new TableHeaderCell();
        thc.Text = i.ToString();
        header.Cells.Add(thc);
    }
    tblPlate.Rows.Add(header);

    //create the plate
    for (int i = 0; i < r; i++)
    {
        TableRow tr = new TableRow();
        TableCell rowHeader = new TableCell();
        rowHeader.CssClass = "style5";
        //add a letter to the beginning of the row
        String rowHeaderText = ((char)(i + 65)).ToString();
        rowHeader.Text = rowHeaderText;
        tr.Cells.Add(rowHeader);
        for (int j = 0; j < c; j++)
        {
            tr.Cells.Add(dwArr[i, j].tc);
        }

        tblPlate.Rows.Add(tr);
    }
}    
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{                
if(Request.QueryString[“Plate_INDEX”]!=null&&
Request.QueryString[“块索引”!=null)
{
String sPIndex=Request.QueryString[“Plate_INDEX”].ToString();
String sBIndex=Request.QueryString[“Block_INDEX”].ToString();
如果(-1!=块索引)
{
lblExpPlate.Text=“编辑解决方案”;
populateFields();
}
hfPlate_INDEX.Value=Plate_INDEX.ToString();
hfBlock_INDEX.Value=Block_INDEX.ToString();
createPlate();
可添加();
}//结束查询字符串!=null
}
}//结束页面\u加载
私有void createPlate()
{
MTT_板_IO mpio=新的MTT_板_IO();
SqlDataReader plateReader=mpio.Get_Plate(Plate_索引);
if(plateReader.Read())
{
r=(int)平板阅读器[“平板行”];
c=(int)plateReader[“Plate_Columns”];
hfPlate_INDEX.Value=plateReader[“Plate_INDEX”].ToString();
dwArr=新显示井[r,c];
对于(int i=0;i
OnInit
方法中创建对象,并删除
if(!Page.IsPostBack)
块,而不是为页面的每个实例实例化对象。这发生在页面生命周期的早期,并将对象保存在服务器端的内存中,允许注册客户端所做的更改