FindControl in modalità Edit DataList
-
09-09-2019 - |
Domanda
In qualità di nuovo / C # web begginner .net, ho sempre arrivare sgambetto quando provo ad usare FindControl. -TV Blam sul mio viso. Qui è il mio attuale problema FindControl:
Ho una pagina aspx e forma, quindi ajax UpdatePanel, al suo interno c'è la mia DataList (DataList1) che ha un EditItemTemplate: che ha il seguente:
<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>
Nel mio codice C # dietro Ho il codice OnClick per l'oggetto 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.";
}
Così, naturalmente, sto ottenendo "riferimento oggetto non impostato su un'istanza di un oggetto" per la FileUpload e l'etichetta.
Qual è la sintassi corretta per trovare questi controlli, prima di trattare con loro in caso OnClick?
L'unico modo Ive usato FindControl è qualcosa di simile:
label thumbnailUploadLabel = DataList1.FindControl ( "thumbnailUploadLabel") come etichetta;
Ma naturalmente questo getta la "Oggetto non impostato a un'istanza di un oggetto" errore. Qualsiasi aiuto è molto apprezzato.
(Ho visto anche il codice 'ricorsivo' là fuori che dovrebbe rendere più facile utilizzando FindControl. Ah! Sono così verde in C # che io non so nemmeno come incorporare quelle nel mio progetto.)
Grazie a tutti per dare un'occhiata a questo.
Soluzione
So che questo è un sacco di inferno in ritardo, ma ero alla ricerca di domande a cui rispondere .... si deve aver capito ormai, ma ancora
se si aggiunge queste righe nel codice
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.";
}
}
questo troverà il controllo appropriato per la riga che si sta modificando ...
mantenere anche la vostra Datalist fuori dal pannello di aggiornamento allucinante di aggiornamento I pannelli non sono compatibili con FileUpload. se si fa il codice verrà eseguito ma mostrerà sempre thumbnailImageUpload.HasFile False.