Подтвердить что ты не робот

Загрузка изображений не работает. Всегда получайте значение FALSE

UI ui Часть загрузки изображений не работает, я хочу загрузить путь к изображениям в базе данных, но не работает, а не правильно связывать, не могу ее сохранить, не могли бы вы мне помочь? Таблица для отображаемого значения изображения изображения всегда ЛОЖЬ введите описание изображения здесь ASPX

<asp:TemplateField HeaderText="Images">
   <ItemTemplate>
      <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
   </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
   <ItemTemplate>
      <asp:Image ImageUrl="~/Uploaded Images/Default.png" runat="server" ID="image"  Width="40" Height="40"/>
   </ItemTemplate>
</asp:TemplateField>

CODE

     #region Detail Save1
        private DataTable CreateDetailSave()
        {
            DataTable dtDetailSave1 = new DataTable();
            DataColumn dc1;
            dc1 = new DataColumn("intArticleDetailId");
            dtDetailSave1.Columns.Add(dc1);
            dc1 = new DataColumn("intSectionId");
            dtDetailSave1.Columns.Add(dc1);
            dc1 = new DataColumn("intCompoundId");
            dtDetailSave1.Columns.Add(dc1);            
            dc1 = new DataColumn("decSectionWeight");
            dtDetailSave1.Columns.Add(dc1);
            dc1 = new DataColumn("intMessageId");
            dtDetailSave1.Columns.Add(dc1);
            dc1 = new DataColumn("strImage");
            dtDetailSave1.Columns.Add(dc1);

            foreach (GridViewRow row in gvArticle.Rows)
            {
                DataRow dr = dtDetailSave1.NewRow();

                Label lblintArticleDetailId = (Label)row.FindControl("lblArticleDetailId");
                Label lblSectionId = (Label)row.FindControl("lblSectionId");
                DropDownList ddlCompound = (DropDownList)row.FindControl("ddlCompoundId");
                TextBox txtdecSectionWeighte = (TextBox)row.FindControl("txtdecSectionWeighte");
                DropDownList intMessage = (DropDownList)row.FindControl("ddlMessage");

                FileUpload fileupload = (FileUpload)row.FindControl("fileupload");

                dr["intArticleDetailId"] = CurrentMode == "Add" ? -1 : Convert.ToInt32(lblintArticleDetailId.Text);

                dr["intSectionId"] = Convert.ToInt32(lblSectionId.Text);
                dr["intCompoundId"] = ddlCompound.SelectedValue;
                dr["decSectionWeight"] = txtdecSectionWeighte.Text.Trim() != "" ? Convert.ToDecimal(txtdecSectionWeighte.Text.Trim()) : 0;
                dr["intMessageId"] = intMessage.SelectedValue;
                dr["strImage"] = fileupload.HasFile;

                dtDetailSave1.Rows.Add(dr);
            }
            return dtDetailSave1;
        }
        #endregion

         #region pageload
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {

                ClearControls();

                FillArticleDetails();

                EnableControls(false);
                Session["SearchPopup"] = false;

            }
            else
            {
                if (Session["SearchPopup"] != null)
                {
                    SearchPopup = (bool)(Session["SearchPopup"]);
                    if (SearchPopup != false)
                    {
                        MyMPE.Show();
                    }
                    else
                    {
                        MyMPE.Hide();
                    }
                }

                vAdSearchParaList = new List<SearchParametors>();

            }
        }
        #endregion
 #region Create Article table
        private void createArticleDataTable()
        {
            if (dt.Columns.Count == 0)
            {
                dt.Columns.Add(new DataColumn("intArticleDetailId", typeof(int)));
                dt.Columns.Add(new DataColumn("intSectionId", typeof(int)));
                dt.Columns.Add(new DataColumn("strSectionName", typeof(string)));
                dt.Columns.Add(new DataColumn("intCompoundId", typeof(string)));
                dt.Columns.Add(new DataColumn("decSectionWeight", typeof(string)));
                dt.Columns.Add(new DataColumn("intMessageId", typeof(string)));
                dt.Columns.Add(new DataColumn("fileupload", typeof(string)));

            }

            gvArticle.DataSource = dt;
            gvArticle.DataBind();
        }        
        #endregion

        #region Compound Grid - Add empty row
        private void ArticleGridAddEmptyRow(int newId)
        {
            DataRow newDr = null;
            newDr = dt.NewRow();
            newDr["intArticleDetailId"] = 1;
            newDr["intSectionId"] = 1;
            newDr["strSectionName"] = "";
            newDr["intCompoundId"] = "";
            newDr["decSectionWeight"] = "";
            newDr["intMessageId"] = "";
            newDr["strImage"] = "";

            dt.Rows.Add(newDr);

            if (dtArticleDetails == null || dtArticleDetails.Rows.Count == 0)
            {
                dtArticleDetails = dt;
            }
            else
            {
                dtArticleDetails.Merge(dt);

                gvArticle.DataSource = dt;
                gvArticle.DataBind();
            }
        }
        #endregion

protected void gvArticle_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            GridViewRow row = gvArticle.Rows[e.RowIndex];
            FileUpload fu = row.Cells[0].FindControl("strImage") as FileUpload;
            if (fu != null && fu.HasFile)
            {
                fu.SaveAs(Server.MapPath("~/Uploaded Images" + fu.FileName));
            }
        }

полный aspx                                                                                   

                    <asp:GridView ID="gvArticle" ShowHeaderWhenEmpty="True" CssClass="table table-bordered table-condensed table-hover" AutoGenerateColumns="False" runat="server" AllowPaging="True" PageSize="15" OnRowDataBound="gvArticle_RowDataBound" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Horizontal" OnRowUpdating="gvArticle_RowUpdating">
                                                 <%--<HeaderStyle BackColor="#3d4247" ForeColor="White" />--%>
                                                            <Columns>
                                                                <asp:TemplateField HeaderText="intArticleDetail" Visible="false">
                                                                    <ItemTemplate>
                                                                        <asp:Label ID="lblArticleDetailId" Width="2" Text='<%# Bind("intArticleDetailId") %>' ClientIDMode="Static" runat="server"></asp:Label> 
                                                                    </ItemTemplate>
                                                                </asp:TemplateField> 

                                                                <asp:TemplateField HeaderText="SectionID" Visible="false">
                                                                     <ItemTemplate>
                                                                        <asp:Label ID="lblSectionId" Width="2" Text='<%# Bind("intSectionId") %>' ClientIDMode="Static" runat="server"></asp:Label> 
                                                                     </ItemTemplate>
                                                                </asp:TemplateField>                                                        

                                                                <asp:TemplateField HeaderText="Section">
                                                                    <ItemTemplate>
                                                                        <asp:Label ID="lblSectionName" Width="100"  Text='<%# Bind("strSectionName") %>' ClientIDMode="Static" runat="server"></asp:Label> 
                                                                    </ItemTemplate>
                                                                </asp:TemplateField>  
                                                                <asp:TemplateField HeaderText="Compound">
                                                                        <EditItemTemplate>
                                                                            <asp:Label ID="lblItemTypeEdit" Width="50" Text='<%# Bind("strCompoundName") %>' lientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
                                                                            </asp:Label>
                                                                        </EditItemTemplate>

                                                                        <ItemTemplate>
                                                                            <asp:DropDownList ID="ddlCompoundId" Width="200" CssClass="form-control my-DropDownThin" lientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
                                                                            </asp:DropDownList>
                                                                        </ItemTemplate>
                                                                 </asp:TemplateField>


                                                                <asp:TemplateField HeaderText="Weight">
                                                                    <ItemTemplate>
                                                                        <asp:TextBox ID="txtdecSectionWeighte" Width="100%" Text='<%# Bind("decSectionWeight") %>' lientIDMode="Static" runat="server">  </asp:TextBox>                                                                            
                                                                    </ItemTemplate>
                                                                </asp:TemplateField>

                                                                <%--<asp:TemplateField HeaderText="Messagers">                                                                
                                                                    <ItemTemplate>
                                                                        <asp:TextBox ID="txtMessage" Width="100%" Text='<%# Bind("intMessageId") %>' ClientIDMode="Static" runat="server"></asp:TextBox>
                                                                    </ItemTemplate>
                                                                </asp:TemplateField>--%>

                                                                 <asp:TemplateField HeaderText="Messagers">
                                                                        <EditItemTemplate>
                                                                            <asp:Label ID="lblMessageId" Width="50" Text='<%# Bind("strMessage") %>' ClientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
                                                                            </asp:Label>
                                                                        </EditItemTemplate>

                                                                        <ItemTemplate>
                                                                            <asp:DropDownList ID="ddlMessage" Width="300" CssClass="form-control my-DropDownThin" lientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
                                                                            </asp:DropDownList>
                                                                        </ItemTemplate>
                                                                 </asp:TemplateField>

                                                                <asp:TemplateField HeaderText="Images">                                                                
                                                                    <ItemTemplate>


                                                              <asp:FileUpload runat="server"  AutoPostBack="True"  ID="uploadFImage" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>

                                                                    </ItemTemplate>
                                                                </asp:TemplateField> 


                                                                   <asp:TemplateField HeaderText="">                                                                
                                                                    <ItemTemplate>


  <asp:Image ImageUrl="~/Uploaded Images/Default.png" runat="server" ID="btnViewFImage"  Width="40" Height="40"/>

                                                                    </ItemTemplate>
                                                                </asp:TemplateField> 

                                                            </Columns>

                                                 <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
                                                 <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
                                                 <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
                                                 <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
                                                 <SortedAscendingCellStyle BackColor="#F7F7F7" />
                                                 <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
                                                 <SortedDescendingCellStyle BackColor="#E5E5E5" />
                                                 <SortedDescendingHeaderStyle BackColor="#242121" />

                                            </asp:GridView>    
                                        </div>
  </ContentTemplate>
       <Triggers>           
            <asp:PostBackTrigger ControlID="gvArticle"/> 
           </Triggers>

                                    </asp:UpdatePanel> 
                                    </div>
                                </div>

gvArticle_rowdatabound

protected void gvArticle_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Footer)
            {


            }
            else if (e.Row.RowType == DataControlRowType.DataRow)
            {


                { 


                }

                DataTable CompoundCode = clsArticle.CompoundDataForGrid("");

                DropDownList ddlCompoundId = (DropDownList)e.Row.FindControl("ddlCompoundId");
                if (ddlCompoundId != null)
                {
                    ddlCompoundId.DataTextField = "Compound Code";
                    ddlCompoundId.DataValueField = "Compound Id";
                    ddlCompoundId.DataSource = CompoundCode;
                    ddlCompoundId.DataBind();

                    string country = (e.Row.FindControl("ddlCompoundId") as DropDownList).Text;
                    ddlCompoundId.Items.FindByValue(country).Selected = true;
                }


                DataTable MsgCode = clsArticle.MessageDataForGrid("");

                DropDownList ddlMessage = (DropDownList)e.Row.FindControl("ddlMessage");
                if (ddlMessage != null)
                {
                    ddlMessage.DataTextField = "Message Name";
                    ddlMessage.DataValueField = "Message Id";
                    ddlMessage.DataSource = MsgCode;
                    ddlMessage.DataBind();

                    ddlMessage.Items.Insert(0, new ListItem("Please select"));
                    string country = (e.Row.FindControl("ddlMessage") as DropDownList).Text;
                    ddlMessage.Items.FindByValue(country).Selected = true;
                }



                //}


            }
        }
4b9b3361

Ответ 1

В вашем коде много проблем. Прежде всего FileUpload элемент управления не имеет свойства AutoPostBack, а также свойства CommandArgument, поэтому вам нужно использовать кнопку в каждой строке.

.aspx

<asp:TemplateField HeaderText="upload">
    <ItemTemplate>
        <asp:FileUpload ID="fileupload" AutoPostBack="true"  runat="server" />
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="upload">
    <ItemTemplate>
        <asp:Button ID="btnUpdate" Text="upload" OnClick="btnUpdate_Click" CommandArgument='<%#Eval("PK_FIELD") %>' runat="server" />
    </ItemTemplate>
</asp:TemplateField>

.aspx.cs фрагмент

protected void btnUpdate_Click(object sender, EventArgs e)
{
    FileUpload fu = 
      ((GridViewRow)((WebControl)sender).NamingContainer)
          .FindControl("fileupload") as FileUpload;
    bool ok = false;
    if (fu != null && fu.HasFile)
    {
        try
        {
            //possible issue here.
            //process NEED PERMISSION to write to this folder
            //also some checks with fu.PostedFile are recommended
            fu.SaveAs(Server.MapPath("~/images/" + fu.FileName));
            ok = true;
        }
        catch (Exception ex)
        {
            ok = false;
        }
    }
    if (ok)
    {
        //update DB table and GridViewRow image field.
    }
}

Я надеюсь, что это объяснение полезно и приемлемо.

Обновление на основе вашего gridview

    <asp:GridView ID="gvArticle" ShowHeaderWhenEmpty="True" CssClass="table
     table-bordered table-condensed table-hover" AutoGenerateColumns="False"
     runat="server" AllowPaging="True" PageSize="15" 
    OnRowDataBound="gvArticle_RowDataBound" 
 DataKeyNames="PK_field"  **important**
    >
        <%--<HeaderStyle BackColor="#3d4247" ForeColor="White" />--%>
        <Columns>
            <asp:TemplateField HeaderText="intArticleDetail" Visible="false">
            <ItemTemplate>
               <asp:Label ID="lblArticleDetailId" Width="2" 
Text='<%# Eval("intArticleDetailId") %>' **Bind is nonsense for label**
 runat="server"></asp:Label> **ClientIDMode="Static" remove everiwhere**
            </ItemTemplate>
            </asp:TemplateField> 

            <asp:TemplateField HeaderText="SectionID" Visible="false">
                 <ItemTemplate>
                    <asp:Label ID="lblSectionId" Width="2" Text='<%# Bind("intSectionId") %>' ClientIDMode="Static" runat="server"></asp:Label> 
                 </ItemTemplate>
            </asp:TemplateField>                                                        
        <asp:TemplateField HeaderText="Section">
            <ItemTemplate>
                <asp:Label ID="lblSectionName" Width="100"  Text='<%# Bind("strSectionName") %>' ClientIDMode="Static" runat="server"></asp:Label> 
            </ItemTemplate>
        </asp:TemplateField>  
        <asp:TemplateField HeaderText="Compound">
            <EditItemTemplate>** no edit mode remove**
                <asp:Label ID="lblItemTypeEdit" Width="50" 
Text='<%# Bind("strCompoundName") %>' ** see above**
ClientIDMode="Static" 
AutoPostBack="true" 
runat="server">                                                                               
                </asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:DropDownList ID="ddlCompoundId" Width="200" 
    CssClass="form-control my-DropDownThin" ClientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
                </asp:DropDownList>
            </ItemTemplate>
         </asp:TemplateField>
    <asp:TemplateField HeaderText="Weight">
    <ItemTemplate>
    <asp:TextBox ID="txtdecSectionWeighte" Width="100%" Text='<%# Bind("decSectionWeight") %>' ClientIDMode="Static" runat="server">  </asp:TextBox>                                                                            
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Messagers">                                                                
    <ItemTemplate>

    <asp:TextBox ID="txtMessage" Width="100%" Text='<%# Bind("intMessageId") %>' ClientIDMode="Static" runat="server"></asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>--%>

        <asp:TemplateField HeaderText="Messagers">
    <EditItemTemplate>
    <asp:Label ID="lblMessageId" Width="50" Text='<%# Bind("strMessage") %>' ClientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
    </asp:Label>
    </EditItemTemplate>

        <ItemTemplate>
    <asp:DropDownList ID="ddlMessage" Width="300" CssClass="form-control my-DropDownThin" ClientIDMode="Static" AutoPostBack="true" runat="server">                                                                               
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Images">                                                                <ItemTemplate>
**work with upload. remove wrong attributes**
**AutoPostBack="True"CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static" ** 
          <asp:FileUpload runat="server" ID="uploadFImage" />
</ItemTemplate>
</asp:TemplateField> 
<asp:TemplateField HeaderText="">                                                                
<ItemTemplate>
<asp:Image ImageUrl="~/Uploaded Images/Default.png" runat="server" ID="btnViewFImage"  Width="40" Height="40"/>
</ItemTemplate>
</asp:TemplateField> 
</Columns>


     <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
     <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
     <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
     <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
     <SortedAscendingCellStyle BackColor="#F7F7F7" />
     <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
     <SortedDescendingCellStyle BackColor="#E5E5E5" />
     <SortedDescendingHeaderStyle BackColor="#242121" />

</asp:GridView>    
** place update button outside to update all columns **
<asp:Button ID="btnUpdate" Text="upload" OnClick="btnUpdate_Click" runat="server" />

//.aspx.cs
    protected void btnUpdate_Click(object sender, EventArgs e)
{
foreach(GridViewRow row in gvArticle.rows)
{

    FileUpload fu = 
          row.FindControl("fileupload") as FileUpload;
    bool ok = false;
    if (fu != null && fu.HasFile)
    {
        try
        {
            //possible issue here.
            //process NEED PERMISSION to write to this folder
            //also some checks with fu.PostedFile are recommended
            fu.SaveAs(Server.MapPath("~/images/" + fu.FileName));
            ok = true;
        }
        catch (Exception ex)
        {
            ok = false;
        }
    }
    if (ok)
    {
        //update DB table and GridViewRow image field.
    }
}
}

Ответ 2

Вы пытаетесь сохранить его с другим путем, чем тот, который вы читаете: Server.MapPath("~/Uploaded Images" + fu.FileName) != <asp:Image ImageUrl="~/Uploaded Images/Default.png" Обратите внимание на отсутствие/в пути сохранения. Попробуйте этот код:

protected void gvArticle_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   GridViewRow row = gvArticle.Rows[e.RowIndex];
   FileUpload fu = row.Cells[0].FindControl("strImage") as FileUpload;
   if (fu != null && fu.HasFile)
   {
       fu.SaveAs(Server.MapPath("~/Uploaded Images/" + fu.FileName));

   }
}

Ответ 3

Когда файл выбран с помощью FileUpload Control, тогда свойство postback, PostedFile инициализируется с помощью объекта HttpPostedFile для файла. Поскольку http request не может поддерживать состояние, поэтому он теряет состояние.

FileUpload элемент управления не будет работать с asynchronous postback. Для получения файла требуется postback. Один из способов - установить triggers для вашей кнопки Upload

ПЕРЕСМОТРЕТЬ СТОИМОСТЬ УПРАВЛЕНИЯ FILEUPLOAD, вы можете полностью сохранить объект загрузки файлов в session и после postback получить требуемые значения из сеанса.

РЕДАКТИРОВАТЬ: Попробуйте выполнить пример.

Ответ 4

Вы используете RowUpdating, поэтому мое предложение использует EditItemTemplate вместе с ItemTemplate, поэтому добавьте это

<EditItemTemplate>
    <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
</EditItemTemplate>

вместе с этим: -

<ItemTemplate>
    <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
</ItemTemplate>

Итак, ваше изображение TemplateField будет выглядеть следующим образом:

<asp:TemplateField HeaderText="Images">
    <ItemTemplate>
        <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
   </EditItemTemplate>
</asp:TemplateField>

И для загрузки файла, как сказал Лесмиан, используйте это: -

protected void gvArticle_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            GridViewRow row = gvArticle.Rows[e.RowIndex];
            FileUpload fu = row.Cells[0].FindControl("strImage") as FileUpload;
            if (fu != null && fu.HasFile)
            {
                fu.SaveAs(Server.MapPath("~/Uploaded Images/" + fu.FileName));
            }
        }

Надеюсь, это поможет вам.

Ответ 5

В aspx-странице используйте команду updatepanel для хранения генерируемого идентификатора. обратитесь к следующему коду.

< asp:TemplateField HeaderText=""> 
  < ItemTemplate>              
   <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="fileUploadPanel">           
     <ContentTemplate>
       <asp:FileUpload runat="server"  AutoPostBack="True"  ID="fileupload" CommandArgument='<%# Eval("strImage") %>' ClientIDMode="Static"/>
     </ContentTemplate>                                                             
     <Triggers>                                                             
      <asp:PostBackTrigger ControlID="fileupload" />    
    </Triggers>                                                 
  </asp:UpdatePanel>                                             
 </ItemTemplate>

<ItemTemplate>                                                 
 <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="ImageUploadPanel">  
  <ContentTemplate>                                         
    <asp:Image ImageUrl="~/Uploaded Images/Default.png" runat="server" ID="image"  Width="40" Height="40"/>                       
  </ContentTemplate>                                    
  <Triggers>                                              
   <asp:PostBackTrigger ControlID="image" />            
 </Triggers>                                  
 </asp:UpdatePanel>                     
</ItemTemplate>                     
< /asp:TemplateField>

Надеюсь, что это поможет.

Ответ 6

Как сказал @Ruban.J, "FileUpload управление не будет работать с асинхронной обратной передачей" означает, что у него всегда есть некоторая проблема с UpdatePanel. Всякий раз, когда a Postback occure FileUpload теряет состояния, [Его файлы],

Он также сказал ДЛЯ ПЕРЕСМОТРЕННОСТИ ЗНАЧЕНИЯ УПРАВЛЕНИЯ FILEUPLOAD вы можете полностью сохранить объект загрузки файлов в сеансе и после возврата после получения требуемых значений из сеанса.

поэтому разбивая весь процесс на небольшие шаги

Шаг 1: вы должны сохранить весь объект FileUpload в сеанс всякий раз, когда происходит обратная связь, для этого я думаю, что это должно работать над событием pageLoad.

 if (!IsPostBack)
            {
                //Bind your gridview 1st time

            }
            else
            {
                Dictionary<int, HttpPostedFile> postedFiles = new Dictionary<int, HttpPostedFile>();

                foreach (GridViewRow row in gvArticle.Rows)
                {

                    int id = Convert.ToInt16("YourUniqueRowId"); // whaterver your unique id is there
                    DropDownList ddlCompound = (DropDownList)row.FindControl("ddlCompoundId");
                    // find your fileupload controll for that row         
                    FileUpload fileupload = (FileUpload)row.FindControl("fileupload");
                    if (fileupload.HasFile)
                    {
                        postedFiles.Add(id, fileupload.PostedFile);
                    }


                }
                Session["files"] = postedFiles;
            } 

Также проверьте, получаете ли вы информацию о файле здесь, просматривая каждый HttpPostedFile.

Шаг 2: всякий раз, когда вам нужны файлы, просто получите его из сеанса:

if (Session["files"] != null)
{
    Dictionary<int, HttpPostedFile> postedFiles = (Dictionary<int, HttpPostedFile>) Session["files"];
}

Вы можете сопоставить значение ключа для определения того, какой файл для какой строки и сохранить его в базе данных.

Ответ 7

Данный код имеет некоторые серьезные ошибки, а также не является полным. Это действительно трудно воспроизвести в моем конце. Во всяком случае, есть что-то, что можно сделать для решения проблемы:

  • Удалите ненужный код, например, метки, содержащие AutopostBack="true".
  • ClientIdMode="static" в Gridview создаст недопустимый HTML и может стать причиной вашей проблемы, потому что он будет создавать элементы HTML, имеющие одинаковые значения id и создающие недопустимую HTML-страницу. Существуют различные строки кода, содержащие этот атрибут. Просто удалите их.
  • В-третьих, ваша строка кода aspx <asp:PostBackTrigger ControlID="gvArticle"/>. Он должен указывать на элемент управления кнопки, который вызывает обратную передачу после того, как вы выбрали изображение. Я думаю, здесь следует сохранить идентификатор кнопки.

Выполняйте изменения в своем коде, и, тем не менее, он не решен, вам нужно предоставить полный код страницы для получения дополнительной диагноза. Наслаждайтесь!

Ответ 8

Вы почти всегда получаете логическое значение (false), так как вы устанавливаете значение strImage как таковое.

dr["strImage"] = fileupload.HasFile;

Проверьте свой код под значком foreach.

Кроме того, при событии gvArticle_RowUpdating() вы найдете для элемента управления файловой загрузкой, где со значением strImage вместо использования определенного идентификатора fileupload.

protected void gvArticle_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = gvArticle.Rows[e.RowIndex];
        FileUpload fu = row.Cells[0].FindControl("fileupload") as FileUpload;
        if (fu != null && fu.HasFile)
        {
            fu.SaveAs(Server.MapPath("~/Uploaded Images" + fu.FileName));
        }
    }

Ответ 9

Попробуйте изменить ClientIDMode = Inherit в вашем элементе управления FileUpload и убедитесь, что он работает.

Ответ 10

Я думаю, что в вашем методе CreateDetailSave внутри цикла foreach вы сохраняете свой filename как fileupload.Hasfile, который всегда будет возвращать true или false. Поэтому он всегда возвращает false:

foreach (GridViewRow row in gvArticle.Rows)
{
    dr["strImage"] = fileupload.filename;         //before it was fileupload.Hasfile
}