2009-04-11 5 views
1

Как новый .net/C# web begginner, я всегда сработал, когда пытаюсь использовать FindControl. Blam -flat на моем лице. Вот моя текущая проблема FindControl:FindControl в режиме редактирования DataList

У меня есть страница .aspx и форму, а затем Ajax UpdatePanel, внутри него есть мой DataList (DataList1), который имеет EditItemTemplate: что имеет следующее:

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

в моем C# код позади меня есть код OnClick для объекта 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."; 
    } 

Так, конечно, я получаю «ссылка на объект не указывает на экземпляр объекта» для FileUpload и Label.

Каков правильный синтаксис для поиска этих элементов управления, прежде чем обращаться с ними в событии OnClick?

Единственный способ Ive использовали FindControl что-то вроде:

этикетки thumbnailUploadLabel = DataList1.FindControl ("thumbnailUploadLabel") в качестве этикетки;

Но, конечно, это вызывает ошибку «Ссылка на объект, не установленную на экземпляр объекта». Любая помощь очень ценится.

(Я также видел «рекурсивный» код, который должен облегчить использование FindControl. Ха! Я настолько зеленый на C#, что даже не знаю, как включить их в свой проект.)

Спасибо всем, что посмотрели на это.

ответ

1

Я знаю, что это чертовски много поздно, но я искал вопросы, чтобы ответить .... вы должны поняли это теперь, но все еще

если добавить эти строки в коде

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

это найдет подходящий элемент управления для строки, которую вы редактируете ...

также держите ваш Datalist вне панели UPdate Panel beacuse. Панели обновления несовместимы с FileUpload. если вы выполните код, но он всегда будет показывать thumbnailImageUpload.HasFile как False.

+0

Привет, Панкай, спасибо за ответ. Позднее лучше никогда. В итоге я использовал код, похожий на то, что вы разместили выше. Да, я обнаружил FileUpload внутри проблемы UpdatePanel, поэтому исправил, что, как только я распознал, они не играют хорошо вместе. Кроме того, я обнаружил NeatUpload от Dean Brettle (www.brettle.com) в качестве очень элегантного объекта загрузки нескольких файлов - если возникнет необходимость ... – Doug