Allora prima di tutto perdonami se sono stato sintetico prima ma con il lavoro tra i piedi diventa tutto molto difficile 
Allora torniamo al primo esempio in cui testiamo semplicemente una lettura ricorsiva di webControl annidati tra loro (Il tutto in una singola pagina)
Nella pagina aspx abbiamo
codice:
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
</asp:CheckBoxList>
<asp:RadioButton ID="RadioButton1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>
<asp:label ID="Label1" runat="server" text="Label"></asp:label>
</div>
</form>
</body>
nel code cerchiamo quindi di caricare il placheHolder con il Page.FindControl("IdControllo") e di leggere ricorsivamente i webcontrol in esso annidati
codice:
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder PlaceHolderCtrl = (PlaceHolder)Page.FindControl("PlaceHolder1");
this.readControls(PlaceHolderCtrl);
}
private void readControls(Control ctrl)
{
if (ctrl == null) return;
Label1.Text += "
Tipo :" + ctrl.GetType().ToString() + " [ID : " + ctrl.ID + "]";
foreach (Control _ctrl in ctrl.Controls)
{
this.readControls(_ctrl);
}
}
Questo script lo scritto e testato prima di postarlo e ti faccio vedere anche l'output che dovrebbe darti
Tipo :System.Web.UI.WebControls.PlaceHolder [ID : PlaceHolder1]
Tipo :System.Web.UI.WebControls.CheckBoxList [ID : CheckBoxList1]
Tipo :System.Web.UI.WebControls.CheckBox [ID : 0]
Tipo :System.Web.UI.WebControls.RadioButton [ID : RadioButton1]
Tipo :System.Web.UI.WebControls.TextBox [ID : TextBox1]
Il secondo esempio che ti ho postato invece , come puoi vedere dalla pagina msdn , spiega come sia possibile utlizzare il PreviousPage solo nel caso in cui l'elaborazione sia passata alla pagina corrente mediante un server.Transfet("url") oppure ci si trovi una condizione di crossposting.
Io sinceramente lo testato solo con il server.Transfert e mi funziona benissimo , ti posto qui l'esempio in cui cè la prima pagina che contiene i webControl da leggere e la seconda che contiene il codice per leggerli in modo ricorsivo
1.
codice:
//AsPx
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
</asp:CheckBoxList>
<asp:RadioButton ID="RadioButton1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"
style="height: 26px" />
</div>
</form>
//AsPx.Cs
protected void Button1_Click(object sender, EventArgs e){
Server.Transfer("~/Default2.aspx");
}
2.
codice:
//AsPx
<form id="form1" runat="server">
<div>
<asp:label ID="Label1" runat="server" text="Label"></asp:label>
</div>
</form>
//AsPx.Cs
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder PlaceHolderCtrl = (PlaceHolder)PreviousPage.FindControl("PlaceHolder1");
readControls(PlaceHolderCtrl);
}
private void readControls(Control ctrl)
{
if (ctrl == null) return;
Label1.Text += "
Tipo :" + ctrl.GetType().ToString() + " [ID : " + ctrl.ID + "]";
foreach (Control _ctrl in ctrl.Controls)
{
this.readControls(_ctrl);
}
}
Non so se questo che ti ho detto possa essereti di aiuto ma può essere utilie per capire come prelevare i webControl mediante la PreviousPage ..