2011-04-06 2 views
0

mon composant (ascx):System.NullReferenceException - Appeler la page secondaire

Ce composant fait partie de ma page, avec lui, j'ouvre une nouvelle page (le code suivant).

public void LoadSeller(string name, string id) 
    { 
     this.txtSeller.Text = name; 
     this.hdnSellerID.Value = id; 
    } 

mon pop-up (ASPX):

Avec ce code, je fait une recherche et sélectionner un élément sur GridView, l'envoi de ce retour à mon ascx.

protected void btnSave_Click(object sender, EventArgs e) 
    { 
     Components.BasicData basicData= new Components.BasicData(); 

     Button save = (Button)sender; 
     basicData.LoadSeller("TEST", save.CommandArgument); 
    } 

Les travaux post arrière, je reçois les bonnes données (j'ai vérifié avec mon débogage). mais le txt et le caché sont tous deux nuls (comme ils ne sont pas chargés), ils fonctionnent sans mon pop-up, mais j'ai besoin du mien pop up.

Des idées?

PS: Mon affichage est UP.

debugger mon code entier et il est arrêté à

this.txtSeller.Text = nom;

Première ligne de LoadSeller. Cela dit que "this.txtSeller" est nul, et je ne sais pas pourquoi. J'ai vérifié mon .designer.cs et this.txtSeller est déclaré. Observer: Je me demandais si mon code détruisait la charge (ou quelque chose comme ça) sur mon autre page.

Merci pour votre aide^^

EDIT:.

Ma structure est la suivante:

PAGE

Control1 

Control2 

    **Open pop up** 

Control3 

POP UP

Search 

Gridview with buttons 

Bouton dans GridView

Goes to my second code "my pop up (aspx):" 

Close pop up 

dans mon Control2 j'ai mon premier code "mon composant (ascx):"

Sous-titre: contrôle == usercontrol

navigation Fil d'Ariane :

  • Solution
    • composants (dossier)
      • . Base de Donnéeascx
    • PopUp.aspx
+0

Qu'est-ce que 'Components.BasicData'? Si c'est UserControl, vous devez le charger avec 'Page.LoadControl (" BasicData.ascx ")' si vous voulez l'ajouter dynamiquement ou le référencer directement s'il est déjà sur la page. –

+0

Merci Tim, pour votre réponse ^.^J'ai essayé d'utiliser 'Components.BasicData', avant cette ligne' Components.BasicData basicData = new Components.BasicData(); 'et cela n'a pas fonctionné. –

Répondre

1

Cette ligne est Components.BasicData basicData= new Components.BasicData(); crée pas le contrôle personnalisé et tous les contrôles à l'intérieur de lui, Nether est un pointeur vers ceux qui existent déjà.

Si vous avez tous inclus votre contrôle sur cette page, vous pouvez directement appeler cette fonction par son identifiant du contrôle. Ce contrôle existe déjà avec votre page, il suffit de l'appeler.

protected void btnSave_Click(object sender, EventArgs e) 
    { 
     Button save = (Button)sender; 
     YourCustomControlID.LoadSeller("TEST", save.CommandArgument); 
    } 

Maintenant, si vous souhaitez envoyer des données à la page suivante vous créez une classe qui gardent vos informations et sa va passer d'une page à remplir et des données.

Dans chaque page vous avez une référence à cette classe, une variable, que l'éther créer un nouvel éther l'obtenir de la page précédente. Vous le stockez sur ViewState

Maintenant de Page1 -> Page2.

Vous envoyez de la page 1 par ensemble à la

PostBackUrl="Page2.aspx" 

Sur page2.aspx vous définissez où vous pouvez obtenir des informations

<%@ PreviousPageType VirtualPath="~/Page1.aspx" %> 

et vous les obtenir par ...

if (Page.PreviousPage != null) 
{ 
    if(Page.PreviousPage.IsCrossPagePostBack == true) 
    { 
     GetTheClass = PreviousPage.MyDataClass; 
    } 
} 

Et une autre manière manuelle est de rendre votre classe sérieuse, l'envoyer comme xml par courrier, et décodez-le sur la page suivante.

+0

J'essaie, dans mon exemple, votre première méthode (mais en faisant d'abord un objet, puis en travaillant avec l'objet). cela envoie mes données, comme je l'ai dit, mais donnez-moi l'erreur 'NULL'. Je vais essayer le cours que vous suggérez. De toute façon +1 pour votre explication, bon message. (Je n'accepte pas comme réponse, encore, parce que, je ne sais pas si cela fonctionnera pour moi.) –

+0

@Nymos Oui, je pense que la deuxième façon est celle dont vous avez besoin. Vous pouvez appeler à partir de la page précédente et des fonctions et probablement vous pouvez appeler votre fonction - vous avez seulement besoin de faire quelques tests pour voir. – Aristos

Questions connexes