0

我想要做的是,我正在使用 asp.net 上传器控件获取文件名/路径,然后将其路径保存为网格视图。例如

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(或其他东西)中显示它们,以便用户可以看到要选择的文件并可以从列出的文件中删除。

只有当用户单击其他按钮说“更新”时,文件才会保存到服务器。你能帮我吗,如何做到这一点?

4

3 回答 3

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);
    }
}

希望能帮助到你。

于 2013-06-25T10:56:57.027 回答
2

要完成此功能,您必须让用户上传文件。您必须暂时保存它们才能显示它们。然后,在用户单击“更新”按钮时,您会将临时文件传输到您的永久存储中。

您是否将 FileUploaders 保存在 GridView 中?

于 2013-06-25T12:46:18.373 回答
0

问题已通过创建一个包含一列用于控制(列数据类型为 FileUpload)的 DataTable 来解决,例如:

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<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);

          }
    }

希望,它会有所帮助。

于 2013-06-26T05:55:28.783 回答