FindControl в режиме редактирования DataList - PullRequest
1 голос
/ 11 апреля 2009

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

У меня есть страница .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?

Единственный способ, которым я использовал FindControl - это что-то вроде:

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

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

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

Спасибо всем за внимание.

1 Ответ

1 голос
/ 14 сентября 2009

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

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

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, поскольку панели обновления не совместимы с FileUpload. если вы сделаете это, код будет работать, но он всегда будет показывать thumbnailImageUpload.HasFile как False.

...