2009-04-11 13 views
1

En tant que nouveau débutant Web .net/C#, je suis toujours dérangé lorsque j'essaie d'utiliser FindControl. Blam -flat sur mon visage. Voici mon problème actuel de FindControl:FindControl en mode d'édition DataList

J'ai une page .aspx et le formulaire, puis ajax UpdatePanel, à l'intérieur il y a mon DataList (DataList1) qui a un EditItemTemplate: qui a les éléments suivants:

<EditItemTemplate> 
<asp:Label ID="thumbnailUploadLabel" runat="server" text="Upload a new thumbnail image:"/><br /> 
<asp:FileUpload ID="thumbnailImageUpload" runat="server" /> 
<asp:Button ID="thunbnailImageUploadButton" runat="server" Text="Upload Now" OnClick="thumbnailUpload"/><br /> 
</EditItemTemplate> 

dans mon code C# derrière je le code OnClick pour l'objet fileUpload:

 protected void thumbnailUpload(object s, EventArgs e) 

    { 

    if (thumbnailImageUpload.HasFile) 

     { 

     //get name of the file & upload 

      string imageName = thumbnailImageUpload.FileName; 

      thumbnailImageUpload.SaveAs(MapPath("../../images/merch_sm/" + imageName)); 

      //let'em know that it worked (or didn't) 
      thumbnailUploadLabel.Text = "Image " + imageName + "has been uploaded."; 
     } 
     else 
     { 
     thumbnailUploadLabel.Text = "Please choose a thumbnail image to upload."; 
    } 

Alors bien sûr, je reçois « référence d'objet non définie à une instance d'un objet » pour le FileUpload et l'étiquette.

Quelle est la syntaxe correcte pour trouver ces contrôles avant de les traiter dans l'événement OnClick?

La seule façon Ive utilisé FindControl est quelque chose comme:

étiquette

thumbnailUploadLabel = DataList1.FindControl ("thumbnailUploadLabel") comme étiquette;

Mais bien sûr, cela lance l'erreur "Référence d'objet non définie sur une instance d'un objet". Toute aide est fortement appréciée.

(J'ai aussi vu le code 'récursif' qui est censé rendre plus facile l'utilisation de FindControl .. Ha! Je suis si vert chez C# que je ne sais même pas comment les incorporer dans mon projet.

Merci à tous pour votre attention.

Répondre

1

Je sais que cela est beaucoup d'enfer en retard, mais je cherchais des questions à répondre .... vous devez avoir deviné maintenant, mais encore

si vous ajoutez ces lignes dans votre code

protected void thumbnailUpload(object sender, EventArgs e) 
    { 
     FileUpload thumbnailImageUpload =(FileUpload)DataList1.Items[DataList1.EditItemIndex].FindControl("thumbnailImageUpload"); 
     Label thumbnailUploadLabel = (Label)DataList1.Items[DataList1.EditItemIndex].FindControl("thumbnailUploadLabel"); 
     if (thumbnailImageUpload.HasFile) 
     { 

      //Your code here 

     } 
     else 
     { 
      thumbnailUploadLabel.Text = "Please choose a thumbnail image to upload."; 
     } 
    } 

ce trouvera le contrôle approprié pour la ligne que vous modifiez ...

aussi votre Datalist garder hors du panneau UPdate beacuse les panneaux à jour ne sont pas compatibles avec FileUpload. Si vous le faites, le code sera exécuté mais il affichera toujours thumbnailImageUpload.HasFile comme Faux.

+0

Hey Pankaj, merci pour la réponse. Tard vaut mieux que jamais. J'ai fini par utiliser du code similaire à ce que vous avez posté ci-dessus. Oui, j'ai découvert le problème FileUpload à l'intérieur de UpdatePanel, donc j'ai résolu qu'une fois que je les ai découverts, ils ne jouent pas bien ensemble. Aussi - J'ai découvert NeatUpload par Dean Brettle (www.brettle.com) comme un objet de téléchargement Multi-File très élégant - en cas de besoin ... – Doug