2009-09-05 7 views
0

Je tryed des valeurs d'accès des contrôles dans page1 à page2 en utilisant la page de croix postback comme suit:Asp.Net (C#) Croix-page Postback

Mon page1 (Default.aspx) a un LinkButton où je stocke des informations lorsque la page est d'abord chargé:

<asp:LinkButton ID="btnNoticia" 
runat="server" Text="Leia ++" 
CommandName="NoticiaID" 
CommandArgument='<%# Eval("NoticiaID")%>' 
EnableViewState="True" 
PostBackUrl="Noticias.aspx" 
/> 

Dans mon page2 (Noticias.aspx) Je récupère les valeurs de « btnNoticia » comme ça:

LinkButton btnLeiaMaisDefault = (LinkButton)Page.PreviousPage.FindControl("btnNoticia"); 

Mais il ne trouve pas le contrôle posté par la page précédente. Je reçois une valeur nulle pour "btnLeiaMaisDefault".

Une idée? PS: LinkButton ID = "btnNoticia" dans la page1 est dans un UpdatePanel.

Merci

Josi

+0

Vous pouvez porter l'information avec session ou Si ce n'est pas une information sensible, vous pouvez utiliser Querystring –

Répondre

-1

Essayez ce code ... il travaille sur mon côté .......

if (Page.PreviousPage!=null) 
     { 
      LinkButton btnLeiaMaisDefault = (LinkButton)Page.PreviousPage.FindControl("btnNoticia"); 
     } 

espère que cela aide.

+0

Vous mettez simplement une instruction if autour du code que l'OP dit ne fonctionne pas? – staterium

+0

J'ai fait 2 pages sur ma machine pour simuler le problème que l'OP est confronté et ça marche –

1

Vous ne pouvez pas simplement utiliser FindControl comme ça. Parce que votre contrôle peut être sous un autre contrôle, vous avez besoin d'une fonction récursive pour itérer tous les contrôles et leurs descendants pour obtenir le contrôle spécifié.

Vous pouvez mettre votre contrôle LinkButton sous le contrôle du panneau et accès avec cette façon:

LinkButton btnLeiaMaisDefault = (LinkButton)Page.PreviousPage.Panel1.FindControl("btnNoticia"); 

ou autre moyen est d'utiliser la fonction récursive:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
    { 
     return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
     Control t = FindControlRecursive(c, id); 
     if (t != null) 
     { 
      return t; 
     } 
    } 

    return null; 
} 
1

naviguer dans votre URL comme

PostBackUrl = "~/Default.aspx"

Code comme

void Page_Load (object sender, System.EventArgs e)

{

TextBox pvProductID = (TextBox)PreviousPage.FindControl("TextBox1"); 

    TextBox pvProductName = (TextBox)PreviousPage.FindControl("TextBox2"); 
    Label1.Text ="You came from: "+ PreviousPage.Title.ToString();   
    Label2.Text = "Product ID: " + pvProductID.Text.ToString(); 
    Label2.Text += "<br />Product Name: " + pvProductName.Text.ToString(); 

    string imageSource = "~/Images/" + pvProductID.Text + ".jpg"; 
    Image1.ImageUrl = imageSource; 
    Image1.BorderWidth = 2; 
    Image1.BorderColor = System.Drawing.Color.DodgerBlue; 
} 

protégé J'ai essayé .... Il fonctionne ...

Questions connexes