我想要做的是,我正在使用asp.net上传器控件获取文件名/路径,然后将其路径保存为网格视图。 e.g
String path = String.Empty;
path = FileUploader.FileName;
然后在网格视图列中保存此路径。
savefiletoGrid(path);
上传所有必需的文件后,我将这些文件保存在服务器上。像这样
while( // condition )
{
string tempfilename = ""; // file name/path from gridview
string path2 = Server.MapPath("Dir\\" + tempfilename);
FileUploader.SaveAs(path2);
}
但问题是文件正在服务器上保存,名称正确,但大小为0字节。 请告诉我如何解决这个问题?
其实我想要在asp.net中上传客户端,我会上传多个文件并在gridview(或其他内容)中显示它们,以便用户可以看到要选择的文件并可以从列出的文件中删除。
仅当用户点击其他按钮说“更新”时,才会将文件保存到服务器。你能帮助我,怎么做到这一点?
答案 0 :(得分:3)
您必须在其RowCommand事件中捕获GridView中生成的事件,并为上传按钮设置CommandName属性。
以下是您可以通过其完成此操作的详细代码:
<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Upload" CommandName="Upload"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
在你的代码背后:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Upload")
{
FileUpload FileUp = (FileUpload)e.Item.FindControl("FileUpload1");
string UploadedFileName = FileUp.FileName;
string Path = Server.MapPath("Documents");
FileUpload.SaveAs(Path + "\\" + UploadedFileName);
}
}
希望它有所帮助。
答案 1 :(得分:2)
要完成此功能,您必须让用户上传文件。您必须暂时保存它们才能显示它们。 然后,当用户单击“更新”按钮时,您将临时文件传输到永久存储器。
您是否将FileUploader保存在GridView中?
答案 2 :(得分:0)
通过创建一个带有一列控件的DataTable(列数据类型为FileUpload)解决了问题,例如:
private DataTable CreateDtDocs(string name, string path, FileUpload FileUploader)
{
DataTable dt1 = new DataTable();
dt1.Columns.Add("SR_NO");
dt1.Columns.Add("Name");
dt1.Columns.Add("Path");
Type col_type = fubrowse.GetType();
DataColumn dt_col = new DataColumn("Control", col_type);
dt1.Columns.Add(dt_col);
DataRow dr = dt1.NewRow();
dr["SR_NO"] = "1";
dr["NAME"] = name;
dr["Path"] = path;
dr["Control"] = FileUploader;
dt1.Rows.Add(dr);
return dt1;
}
然后填充如下表:
private DataTable AddDtDocs(string name, string path, FileUpload FileUploader)
{
DataTable dt1 = (DataTable)Session["AttachFilesdt"];
int count = dt1.Rows.Count;
DataRow dr = dt1.NewRow();
dr["SR_NO"] = count + 1;
dr["NAME"] = name;
dr["Path"] = path;
dr["Control"] = FileUploader;
dt1.Rows.Add(dr);
return dt1;
}
然后我在Dictionary中添加路径名和控件,并将它们传递给另一个函数以将它们保存在服务器上。
Dictionary<string, FileUpload> DocsPathAndControl = new Dictionary<string, FileUpload>();
if (Session["AttachFilesdt"] != null)
{
tempdt = (DataTable)Session["AttachFilesdt"];
for (int i = 0; i < tempdt.Rows.Count; i++)
{
DocsPathAndControl.Add(tempdt.Rows[i]["Path"].ToString(), (FileUpload)tempdt.Rows[i]["Control"]);
}
Session["AttachFilesdt"] = null;
}
保存文件的功能
private void AddDocuments(int jurisdictionID, Dictionary<string,FileUpload> docPathsAndControl)
{
foreach (var item in docPathsAndControl)
{
string tempfilename = jurisdictionID + "_" + item.Key.ToString();
string path = Server.MapPath("Dir\\" + tempfilename);
FileUpload FileUploaderControl = (FileUpload)item.Value;
FileUploaderControl.PostedFile.SaveAs(path);
}
}
希望,它会帮助。