【发布时间】:2011-09-23 20:59:24
【问题描述】:
您好,我尝试在详细信息视图中添加文件上传,我在此处附加了我的代码中的一些部分:
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="586px"
DefaultMode="Edit" AutoGenerateRows="False" BorderColor="White"
BorderStyle="None" DataSourceID="EntityDataSource1" GridLines="None" DataKeyNames="UserName" OnItemUpdated="DetailsView1_ItemUpdated" ONItemEditing="DetailsView1_ItemEditing">
然后文件上传控件被放置在模板字段内:
<asp:TemplateField HeaderText="Foto">
<EditItemTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
数据源是:
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=mesteriEntities" DefaultContainerName="mesteriEntities"
EnableFlattening="False" EntitySetName="Users"
EnableUpdate="True" AutoGenerateWhereClause="True"
EnableInsert="True">
<WhereParameters>
<asp:SessionParameter Name="UserName" SessionField="New" Type="String" />
</WhereParameters>
</asp:EntityDataSource>
背后的代码:
protected void DetailsView1_ItemEditing(object sender, DetailsViewInsertEventArgs e)
{
FileUpload fu1 = (FileUpload)DetailsView1.FindControl("FileUpload1");
if (fu1 == null)
e.Cancel = true;
if (fu1.HasFile)
{
try
{
string fileName = Guid.NewGuid().ToString();
string virtualFolder = "~/UserPics/";
string physicalFolder = Server.MapPath(virtualFolder);
// StatusLabel.Text = "Upload status: File uploaded!";
string extension = System.IO.Path.GetExtension(fu1.FileName);
fu1.SaveAs(System.IO.Path.Combine(physicalFolder, fileName + extension));
e.Values["foto"] = System.IO.Path.Combine(physicalFolder, fileName + extension);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
else
e.Cancel = true;
}
我不确定为什么不起作用。它不会将文件上传到服务器上,也不会在文件的数据库中添加引用。为什么我在这里做错了?
谢谢
【问题讨论】:
标签: c# file-upload detailsview