Загрузка изображений не работает. Всегда получайте значение FALSE
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;
}
//}
}
}
Ответы
Ответ 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
}