SearchCriteria 객체를 만들기위한 몇 가지 체크 박스 등이있는 ASP.NET 웹 폼이 있습니다. 제출 버튼을 클릭하면 repeater1에게 SearchCriteria에 따라 일부 레코드를 표시하도록 요청합니다. repeater1 내부에서 나는 updatepanel과 또 다른 하나의 repeater (ChildRepeater)로 사용자를 제어한다.ASP.NET은 포스트 백 이후에 양식에서 데이터를 잃습니다. 리피터 내부의 리피터 내부에있는 리피터
내 문제 : 포스트 백 이후에 버튼을 클릭하면 양식의 모든 데이터가 손실됩니다 (예 : 체크 박스가 선택됨). 페이지가 기본값을로드하고 있지만 코드에서 (! IsPostBack) 경우에만 기본값 (모든 확인란이 선택됨)이로드됩니다. 당연히 나는 "EnableViewState = true"aspx에서, 나는 또한 세션에서 데이터를 저장하려고했지만 또한 작동하지 않습니다 (기본값은이 설정을 다시 작성합니다).
리피터 (리피터 1)가있을 때 포스트 백 이후의 양식에는 모든 데이터가 포함되어 있으므로 updatepanel에 문제가 있다고 생각하지만 정확히 어디서 왔는지는 알 수 없습니다. 페이지를 다시로드 한 후 양식의 데이터가 손실되는 이유를 설명해 주시겠습니까? 나는 어떤 실수도 볼 수 없다. ..
나의 파일은있다. 그러나 나는 n-tier architecture를 가지고있다. .. View/BLL (DAL과 sql 연결이 잘 작동한다)에서 필요한 파일 만 넣는다. 여기
<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>
ShowAgreements.aspx.cs :
AgreementsSearchCriteria AgreementSearchCriteriaObj = new AgreementsSearchCriteria();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Controller.ReadDostawcy();
Controller.ReadOdbiorcy();
Controller.ReadPracownikOdp();
}
Controller.ReadAllAgreements();
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Agreement umowa = e.Item.DataItem as Agreement;
BazaUmow.Controls.FilesRepeaterControl test = e.Item.FindControl("FilesRepeaterControl") as FilesRepeaterControl;
test.umowa = umowa;
}
}
protected void szukaj_Click(object sender, EventArgs e)
{
if (IsValid == true)
{
AddNaviPoint();
Controller.ReadAllAgreements();
}
}
public AgreementSearchCollection BindUmowyResults
{
set
{
Repeater1.DataSource = value;
Repeater1.DataBind();
}
}
,691
screen
ShowAgreements.aspx은 (는 컨트롤과 부모 리피터 포함) : 어떻게 보이는지 화면이 제어 언어 = "C#을"으로 AutoEventWireup = "true"를 숨김 = "FilesRepeaterControl.ascx.cs"상속 @
FilesRepeaterControl.ascx <% = "BazaUmow.Controls.FilesRepeaterControl"%>
<tr>
<td style="width: 150px">
<asp:Button ID="btnRozwin" runat="server" Text="+" OnClick="btnRozwin_Click" />
<asp:LinkButton ID="lbl_numerUmowy" runat="server" OnClick="lbl_numerUmowy_Click"></asp:LinkButton>
</td>
<td style="width: 150px">
<asp:Label ID="lbl_przedmiotUmowy" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_odbiorca" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_dostawca" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_rodzajUmowy" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_charakterUmowy" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_statusWypozyczenia" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_dataPodpisania" runat="server" /></td>
<td style="width: 150px">
<asp:Label ID="lbl_statusUmowy" runat="server" /></td>
</tr>
<tr>
<td>
<asp:UpdatePanel ID="UpdatePanelFilesInfo" runat="server">
<ContentTemplate>
<asp:Repeater ID="filesRptr" runat="server" OnItemDataBound="filesRptr_ItemDataBound">
<HeaderTemplate>
<table style=" width:170px">
<tr style="font-weight: bold;">
<td style="width:170px;">Pliki umowy</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="lblPlikUmowy" runat="server" OnCommand="lblPlikUmowy_Command"></asp:LinkButton></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater ID="aneksyRptr" runat="server" OnItemDataBound="aneksyRptr_ItemDataBound">
<HeaderTemplate>
<table style=" width:170px">
<tr style="font-weight: bold;">
<td style="width:170px;">Aneksy do umowy</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="lblAneksUmowy" runat="server" OnCommand="lblAneksUmowy_Command"></asp:LinkButton></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
FilesRepeaterControl.ascx .cs (여기서 우리는 부모 리피터에 데이터를 추가하고 btnRozwin 버튼을 클릭하면 두 개의 자식 리피터를 채 웁니다) 공개 동의 umowa {get; 세트; 당신이 당신의 업데이트 패널을 다시 게시 할 때, 당신은 모든 데이터를 저장할 수 있습니다 손실이 판넬에 있던 그래서 모든 데이터를 페이지 (업데이트 패널로 둘러싸여 있습니다) 일부를 갱신하기 때문에}
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"]);
}
}
코드, aspx 및 코드 뒤에 간단한 버전을 게시하려고합니다. –
시도한 코드를 게시 할 수 있습니까? –