C# ASP.net文件上载以填充表,但在会话中保存所有文件

C# ASP.net文件上载以填充表,但在会话中保存所有文件,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个asp.net web应用程序,它保存输入的所有详细信息,并在最后发送一封包含所有详细信息的电子邮件,包括文件上载功能(所有这些都有效) 我遇到的问题是需要更改文件上载页面。我希望现在能够上传多个文档,这样用户基本上可以找到要上传的文件,然后单击“添加”按钮。然后应清除上载文件,并用上载文件填充表格,并执行编辑或删除操作 正如我所说,我有一个文件上传工作使用代码背后,但我不知道如何实现我的目标,使所有上传的文件都在我的电子邮件中发送 HTML <div class="form-gr

我有一个asp.net web应用程序,它保存输入的所有详细信息,并在最后发送一封包含所有详细信息的电子邮件,包括文件上载功能(所有这些都有效)

我遇到的问题是需要更改文件上载页面。我希望现在能够上传多个文档,这样用户基本上可以找到要上传的文件,然后单击“添加”按钮。然后应清除上载文件,并用上载文件填充表格,并执行编辑或删除操作

正如我所说,我有一个文件上传工作使用代码背后,但我不知道如何实现我的目标,使所有上传的文件都在我的电子邮件中发送

HTML

<div class="form-group">
     <div class="col-sm-offset-2 col-sm-5">
          <div class="fileinput fileinput-new input-group" data-provides="fileinput">
               <div class="form-control" data-trigger="fileinput" style="background-color: #ededed">
                    <span class="fileinput-filename"></span>
               </div>
               <span class="input-group-addon btn btn-default btn-file">
                    <span class="fileinput-new">
                         <span class="glyphicon glyphicon-folder-open" title="Click to select a file."></span>
                    </span>
                    <span class="fileinput-exists">
                         <span class="glyphicon glyphicon-folder-open" title="Click to change the selected file."></span>
                    </span>
                    <input type="file" name="..." id="fuAttachment" runat="server" />
               </span>
               <a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">
                    <span class="glyphicon glyphicon-remove" title="Remove selected file."></span>
               </a>
          </div>
     </div>
     <div class="col-sm-3">
          <asp:DropDownList ID="Step03WebTypeDD" runat="server" class="form-control">
               <asp:ListItem Value="- - Please select - -">- - Please select - -</asp:ListItem>
               <asp:ListItem Value="Requirements">Requirements</asp:ListItem>
               <asp:ListItem Value="Functional specification">Functional specification</asp:ListItem>
               <asp:ListItem Value="Page Content">Page Content</asp:ListItem>
               <asp:ListItem Value="Page Designs">Page Designs</asp:ListItem>
               <asp:ListItem Value="Page Designs">Other</asp:ListItem>
          </asp:DropDownList>
     </div>
     <div class="col-sm-1">                                    
          <asp:LinkButton ID="UploadAddButton" runat="server" OnClick="Step05UploadAddButton_Click" CssClass="btn btn-success pull-right" ToolTip="Click to upload the file.">
               <span class="glyphicon glyphicon-plus"></span> Add
          </asp:LinkButton>
     </div>
</div>

只是给你一个如何实施的想法。。。将对象列表存储到会话中

MyFile对象:

class MyFile
{
    public Guid Id { get; set; }
    public byte[] Content { get; set; }
    public string ContentType { get; set; }
    public string Name { get; set; }
    public MyFile()
    {
        Id = Guid.NewGuid();
    }
}
更新:添加了视图代码

视图:


文件名
内容类型
代码隐藏:

var file = fuAttachment.PostedFile;
            if (file != null && fuAttachment.PostedFile.FileName != "")
            {
                var content = new byte[file.ContentLength];
                file.InputStream.Read(content, 0, content.Length);
                List<MyFile> myUploadedFiles = null;

                if(Session["UploadedFiles"] == null)
                {
                    myUploadedFiles = new List<MyFile>();
                }
                else
                {
                    myUploadedFiles = (List<MyFile>)Session["UploadedFiles"];
                }

                myUploadedFiles.Add(new MyFile()
                {
                    Content = content,
                    ContentType = file.ContentType,
                    Name = file.FileName
                });

                Session["UploadedFiles"] = myUploadedFiles;
            }
            else
            {
                Session["UploadedFiles"] = null;
            }

uploadedFileList.DataSource = myUploadedFiles;
uploadedFileList.DataBind();

protected void lkbCommandAction_Command(object sender, CommandEventArgs e) 
    {
        if (e.CommandArgument == null)
        {
            /*TODO*/
        }
        else 
        {
            List<MyFile> myUploadedFiles = null;

                if(Session["UploadedFiles"] == null)
                {
                    myUploadedFiles = new List<MyFile>();
                }
                else
                {
                    myUploadedFiles = (List<MyFile>)Session["UploadedFiles"];
                }

                Guid removeId= (Guid)e.CommandArgument;
                MyFile fileToRemove = myUploadedFiles.FIrstOrDefault(ff => ff.Id == removeId);
                if(fileToRemove != null)
                {
                     myUploadedFiles.Remove(fileToRemove);
                }
                uploadedFileList.DataSource = myUploadedFiles;
                uploadedFileList.DataBind();
        }
    }
var file=fuAttachment.PostedFile;
如果(file!=null&&fuAttachment.PostedFile.FileName!=“”)
{
var content=新字节[file.ContentLength];
file.InputStream.Read(content,0,content.Length);
List myUploadedFiles=null;
if(会话[“UploadedFiles”]==null)
{
myUploadedFiles=新列表();
}
其他的
{
myUploadedFiles=(列表)会话[“UploadedFiles”];
}
myUploadedFiles.Add(新建MyFile()
{
内容=内容,
ContentType=file.ContentType,
Name=file.FileName
});
会话[“UploadedFiles”]=myUploadedFiles;
}
其他的
{
会话[“UploadedFiles”]=null;
}
uploadedFileList.DataSource=myUploadedFiles;
uploadedFileList.DataBind();
受保护的void lkbCommandAction_命令(对象发送方,CommandEventArgs e)
{
if(e.CommandArgument==null)
{
/*待办事项*/
}
其他的
{
List myUploadedFiles=null;
if(会话[“UploadedFiles”]==null)
{
myUploadedFiles=新列表();
}
其他的
{
myUploadedFiles=(列表)会话[“UploadedFiles”];
}
Guid removeId=(Guid)e.CommandArgument;
MyFile fileToRemove=myUploadedFiles.FIrstOrDefault(ff=>ff.Id==removeId);
if(fileToRemove!=null)
{
myUploadedFiles.Remove(fileToRemove);
}
uploadedFileList.DataSource=myUploadedFiles;
uploadedFileList.DataBind();
}
}

由于您现在在会话中有一个文件列表,您可以跟踪用户上传的文件的文件名、内容类型等,并对其执行所需操作。

谢谢您的回答,但我如何获得它,以便在单击“添加”按钮时,在我的视图中将每个文档的条目添加到表中
<asp:ListView ID="uploadedFileList" runat="server">
    <ItemTemplate>
        <tr>
            <td><%# Eval("Name")%></td>
            <td><%# Eval("ContentType")%></td>
            <td><asp:LinkButton Text="Remove" ID="lkbCommandAction" CommandArgument='<%# Eval("Id") %>' OnCommand="lkbCommandAction_Command" runat="server" /></td>
        </tr>
    </ItemTemplate>
    <LayoutTemplate>
        <table id="tbl1" runat="server">
            <tr id="tr1" runat="server">
                <td id="td1" runat="server">File Name</td>
                <td id="td2" runat="server">Content-Type</td>
                <td id="td3" runat="server"></td>
            </tr>
            <tr id="ItemPlaceholder" runat="server">  
            </tr>
        </table>
    </LayoutTemplate>
</asp:ListView>
var file = fuAttachment.PostedFile;
            if (file != null && fuAttachment.PostedFile.FileName != "")
            {
                var content = new byte[file.ContentLength];
                file.InputStream.Read(content, 0, content.Length);
                List<MyFile> myUploadedFiles = null;

                if(Session["UploadedFiles"] == null)
                {
                    myUploadedFiles = new List<MyFile>();
                }
                else
                {
                    myUploadedFiles = (List<MyFile>)Session["UploadedFiles"];
                }

                myUploadedFiles.Add(new MyFile()
                {
                    Content = content,
                    ContentType = file.ContentType,
                    Name = file.FileName
                });

                Session["UploadedFiles"] = myUploadedFiles;
            }
            else
            {
                Session["UploadedFiles"] = null;
            }

uploadedFileList.DataSource = myUploadedFiles;
uploadedFileList.DataBind();

protected void lkbCommandAction_Command(object sender, CommandEventArgs e) 
    {
        if (e.CommandArgument == null)
        {
            /*TODO*/
        }
        else 
        {
            List<MyFile> myUploadedFiles = null;

                if(Session["UploadedFiles"] == null)
                {
                    myUploadedFiles = new List<MyFile>();
                }
                else
                {
                    myUploadedFiles = (List<MyFile>)Session["UploadedFiles"];
                }

                Guid removeId= (Guid)e.CommandArgument;
                MyFile fileToRemove = myUploadedFiles.FIrstOrDefault(ff => ff.Id == removeId);
                if(fileToRemove != null)
                {
                     myUploadedFiles.Remove(fileToRemove);
                }
                uploadedFileList.DataSource = myUploadedFiles;
                uploadedFileList.DataBind();
        }
    }