2009-04-11 14 views
1

Als neuer .net/C# -Web-Beginner stolperte ich immer, wenn ich FindControl benutzen wollte. Blam - flach auf meinem Gesicht. Hier ist mein aktuelles Findcontrol Problem:FindControl im DataList Editiermodus

ich eine ASPX-Seite und Formular habe, dann Ajax Updatepanel, im Innern gibt es meinen Datalist (DataList1), die eine EditItemTemplate hat:

<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> 

: dass die folgenden hat in meinem C# -Code hinter ich habe den OnClick-Code für das Fileupload-Objekt:

 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."; 
    } 

So natürlich ich bin immer „Objektverweis nicht auf eine Instanz eines Objekts festgelegt“ für das Fileupload und dem Etikett.

Wie lautet die richtige Syntax, um diese Steuerelemente zu finden, bevor Sie sie im OnClick-Ereignis behandeln?

Der einzige Weg, Ive Findcontrol verwendet wird, ist so etwas wie:

Label thumbnailUploadLabel = DataList1.FindControl ("thumbnailUploadLabel") als Aufkleber;

Aber natürlich wirft dies den Fehler "Objektreferenz nicht auf eine Instanz eines Objekts eingestellt". Jede Hilfe wird sehr geschätzt.

(Ich habe auch den 'rekursiven' Code da draußen gesehen, der FindControl einfacher machen soll. Ha! Ich bin so grün bei C#, dass ich nicht einmal weiß, wie ich diese in mein Projekt einbauen soll.)

Vielen Dank an alle für einen Blick auf diese.

Antwort

1

Ich weiß, dass dies eine Hölle viel zu spät ist, aber ich war auf der Suche nach Fragen zu beantworten .... Sie müssen es jetzt dargestellt haben, aber immer noch

, wenn Sie diese Zeilen im Code hinzufügen

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."; 
     } 
    } 

Dies wird das entsprechende Steuerelement für die zu bearbeitende Zeile finden ...

halten Sie auch Ihren Datalist aus dem UPdate Panel, da Update Panels nicht mit FileUpload kompatibel sind. Wenn Sie den Code ausführen, wird aber immer angezeigt thumbnailImageUpload.HasFile als False.

+0

Hey Pankaj, danke für die Antwort. Spät ist besser als nie. Ich habe am Ende Code verwendet, der dem ähnlich ist, was Sie oben gepostet haben. Ja, ich habe den FileUpload innerhalb des UpdatePanel Problems entdeckt, also habe ich festgestellt, dass sie nicht gut zusammenspielen. Außerdem - ich habe NeatUpload von Dean Brettle (www.brettle.com) als sehr elegantes Multi-File-Upload-Objekt entdeckt - bei Bedarf entsteht ... – Doug