C# ASP.NET在回发后丢失表单中的数据-updatepanel内的repeater内的repeater

C# ASP.NET在回发后丢失表单中的数据-updatepanel内的repeater内的repeater,c#,asp.net,C#,Asp.net,我有一个ASP.NET web表单,其中我有几个复选框等,以使SearchCriteria对象。当我点击submit按钮时,我要求repeater1根据SearchCriteria显示一些记录。在repeater1内部,我有updatepanel和另一个one repeater ChildRepeater的用户控件 我的问题是:当我在回发后单击按钮上的“发送”时,我丢失了表单中的所有数据,例如复选框已选中。页面正在加载默认值,但在我的代码中,我只在以下情况下加载默认所有复选框!我回来了。 当然,

我有一个ASP.NET web表单,其中我有几个复选框等,以使SearchCriteria对象。当我点击submit按钮时,我要求repeater1根据SearchCriteria显示一些记录。在repeater1内部,我有updatepanel和另一个one repeater ChildRepeater的用户控件

我的问题是:当我在回发后单击按钮上的“发送”时,我丢失了表单中的所有数据,例如复选框已选中。页面正在加载默认值,但在我的代码中,我只在以下情况下加载默认所有复选框!我回来了。 当然,我在.aspx中启用了EnableViewState=true,我还尝试在会话中保存表单中的数据,但默认值重写此设置也不起作用

当我只有一个repeater repeater时,回发后我的表单上有我放在上面的所有数据,所以我认为updatepanel中有一些问题,但我不知道具体在哪里。 你能解释一下为什么我的表单在重新加载页面后会丢失数据吗?我看不出有什么错误

在底部是我的文件,但我有n层架构,所以。。。我只从View/BLL DAL中放入了必要的文件,sql连接工作正常 这里有一个屏幕,显示它的外观:

ShowAgreements.aspx它包含控件和父中继器:

    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
        <HeaderTemplate>
            <table style="border: 1px solid #0000FF; width: 1250px">
                <tr style="background-color: #3d6db0; color: #000000; font-weight: bold;">

                    <td style="width: 150px;">Numer</td>
                    <td style="width: 150px;">Przedmiot umowy</td>
                    <td style="width: 150px;">Odbiorca</td>
                    <td style="width: 150px;">Dostawca</td>
                    <td style="width: 150px;">Rodzaj umowy</td>
                    <td style="width: 150px;">Charakter umowy</td>
                    <td style="width: 150px;">Status wypożyczenia</td>
                    <td style="width: 150px;">Data podpisania</td>
                    <td style="width: 150px;">Status</td>
                </tr>
        </HeaderTemplate>

      <itemtemplate>
        <uc1:FilesRepeaterControl runat="server" id="FilesRepeaterControl" />
          </itemtemplate>
        <FooterTemplate>         
            </table>
        </FooterTemplate>
    </asp:Repeater>
FileRepeaterControl.ascx


这是因为当您回发更新面板时,它会刷新页面的更新面板所包围的部分,因此该面板上的所有数据都将丢失。您可以在ViewState中保存所需的所有数据

protected void UpdatePanelClick_OnClick(object sender, EventArgs e)
{
    List<int> checkedIds = new List<int>();
    //working with grid saving ids on list
    ViewState["saveUpdatePanelData"] = checkedIds;
}
而在回发后的pageload上,您可以获取此数据并进行初始化

protected void Page_Load(object sender, EventArgs e)
{
    if (ViewState["saveUpdatePanelData"]!= null)
    {
        checkedIds = ViewState["saveUpdatePanelData"] as List<int>;
    }
}

这就是ViewState的工作方式

尝试在您的代码、aspx和代码隐藏上发布一个简化版本。您可以发布您尝试过的代码吗?因此,如果我在.aspx站点上仅使用EnableViewState=true,这是不够的,我应该使用这样的列表?我觉得很奇怪,但是我添加的复选框的表单状态等的数据-请看屏幕不在updatepanel中,所以我认为它应该保存在enableviewstate中,我错了吗?@guitargirl顺便说一句,当您单击btnRozwin时,您会在服务器上发回整个页面,而不是其中的一部分。这就是为什么它会从页面加载中初始化。尝试将您的btnRozwin放入updatepanel中。您可以保存有关ViewState obj的任何信息。
    protected void Page_Load(object sender, EventArgs e)
    {
                lbl_numerUmowy.Text = umowa.numer_umowy.ToString();
                lbl_przedmiotUmowy.Text = umowa.przedmiot_umowy.ToString();
                lbl_odbiorca.Text = umowa.odbiorca_tekst.ToString();
                lbl_dostawca.Text = umowa.dostawca_tekst.ToString();
                lbl_rodzajUmowy.Text = umowa.rodzaj_umowy_tekst.ToString();
                lbl_charakterUmowy.Text = umowa.charakter_umowy_tekst.ToString();
                lbl_statusWypozyczenia.Text = umowa.status_wypozyczenia_tekst.ToString();
                lbl_dataPodpisania.Text = umowa.data_podpisania.ToString("yyyy-MM-dd");
                lbl_statusUmowy.Text = umowa.status_umowy.ToString();
    }

    protected void filesRptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Plik plik = e.Item.DataItem as Plik;

            LinkButton lblPlikUmowy = e.Item.FindControl("lblPlikUmowy") as LinkButton;
            lblPlikUmowy.Text = plik.nazwa_pliku.ToString();
            lblPlikUmowy.CommandArgument = plik.guid + plik.rozszerzenie;

        }

    }


    protected void aneksyRptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Plik plik = e.Item.DataItem as Plik;

            LinkButton lblAneksUmowy = e.Item.FindControl("lblAneksUmowy") as LinkButton;
            lblAneksUmowy.Text = plik.nazwa_pliku.ToString();
            lblAneksUmowy.CommandArgument = plik.guid + plik.rozszerzenie;

        }

    }

    protected void btnRozwin_Click(object sender, EventArgs e)
    {
        if (btnRozwin.Text == "+")
        {
            filesRptr.Visible = true;
            aneksyRptr.Visible = true;

            filesRptr.DataSource = Controller.ReadFilesByAgreement(Convert.ToInt32(lbl_numerUmowy.Text), 1);
            filesRptr.DataBind();

            aneksyRptr.DataSource = Controller.ReadFilesByAgreement(Convert.ToInt32(lbl_numerUmowy.Text), 2);
            aneksyRptr.DataBind();

            btnRozwin.Text = "-";

        }

        else
        {
            filesRptr.Visible = false;
            aneksyRptr.Visible = false;
            btnRozwin.Text = "+";

        }

    }

    protected void lbl_numerUmowy_Click(object sender, EventArgs e)
    {
        string numer_umowy = ((LinkButton)sender).Text;
        Page.Response.Redirect("~/SeeAgreementData.aspx?numer=" + numer_umowy + "&email=" + Request.QueryString["email"]);
    }

}
protected void UpdatePanelClick_OnClick(object sender, EventArgs e)
{
    List<int> checkedIds = new List<int>();
    //working with grid saving ids on list
    ViewState["saveUpdatePanelData"] = checkedIds;
}
protected void Page_Load(object sender, EventArgs e)
{
    if (ViewState["saveUpdatePanelData"]!= null)
    {
        checkedIds = ViewState["saveUpdatePanelData"] as List<int>;
    }
}