Как загрузить все файлы в элементах управления FileUpload в элементах ретранслятора ASP.NET? - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть элемент управления ASP.NET Repeater с элементом управления FileUpload в его шаблоне элемента.Ретранслятор ASP.NET находится внутри UpdatePanel как часть мастера, созданного из ASP.NET Multiview.Я пытаюсь загрузить каждый файл в каждом элементе управления FileUpload при нажатии кнопки «Отправить», но элементы управления FileUpload не сохраняют файл при отправке формы.Вот соответствующий код:

<asp:Repeater ID="RepeaterImages" runat="server" OnItemCommand="RepeaterBoxArts_ItemCommand">
  <ItemTemplate>
    <tr>
       <td class="right">
          Choose File:
       </td>
       <td>
           <asp:FileUpload ID="FileUpload" runat="server" />
       </td>
    </tr>
  </ItemTemplate>

foreach (RepeaterItem item in RepeaterImages.Items)
    {
        if (item.ItemType == ListItemType.Item
            || item.ItemType == ListItemType.AlternatingItem)
        {
            FileUpload fupload = (FileUpload)item.FindControl("FileUpload");
             if (fupload.HasFile)
            {
                string path = Server.MapPath("~/images/");
                fupload.SaveAs(path);

            }
        }
    }

Когда я нажимаю Отправить, я хочу, чтобы все элементы управления FileUpload с файлом загружали свои файлы.Однако, если я запускаю пошаговый отладчик, он показывает, что каждый элемент управления FileUpload не имеет файла.Кажется, это проблема с постбэками, но я не уверен на 100%.

1 Ответ

3 голосов
/ 04 мая 2012

У меня была такая же проблема, и я решил добавить этот код

OnClientClick = "javascript: document.forms [0] .encoding = 'multipart / form-data';"

на кнопку, которая будет загружать все изображения.

Ответ на эту проблему я нашел по этой ссылке https://stackoverflow.com/a/217722

См. Мой код ниже:

На странице ASPX

<asp:Repeater ID="rptUpload" runat="server" OnItemDataBound="rptUpload_ItemDataBound">
                            <HeaderTemplate>
                                <table width="100%">
                            </HeaderTemplate>
                            <ItemTemplate>
                                <tr>
                                    <td>
                                        <asp:FileUpload ID="fu" runat="server" />
                                    </td>
                                </tr>
                            </ItemTemplate>
                            <FooterTemplate>
                                </table>
                            </FooterTemplate>
                        </asp:Repeater>

                        <p>
                            <asp:ImageButton ID="btnUpload" runat="server" OnClick="btnUpload" ImageUrl="img/icon_upload.png" OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';" />
                        </p>

В CodeBehind

protected void btnUpload_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            foreach (RepeaterItem item in rptUpload.Items)
            {
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    FileUpload fu = (FileUpload)item.FindControl("fu");
                    if (fu.HasFile)
                    {
                        string path = Server.MapPath("~/images/");
                        string fileName = Path.GetFileName(fu.FileName);
                        string fileExt = Path.GetExtension(fu.FileName).ToLower();
                        fu.SaveAs(path + fileName + fileExt);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
...