我尝试过使用Asp.Net C#在Web服务器上上传文件的代码。代码没有编译错误,仍然在运行时它既不保存文件也不在网格视图中显示它。哪里错了?我目前的代码如下:
protected void Button1_Click(object sender, EventArgs e) {
if (FileUpload1.HasFile)
{
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/resumes") + FileUpload1.FileName);
}
DataTable dt = new DataTable();
dt.Columns.Add("File", typeof(string));
dt.Columns.Add("Type", typeof(string));
foreach (string strFile in Directory.GetFiles(Server.MapPath("~/resumes"))) {
FileInfo fi = new FileInfo(strFile);
dt.Rows.Add(fi.Name, fi.Extension);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
答案 0 :(得分:1)
您向DataTable添加行错误。但更重要的是,为什么要使用DataTable?不要使用DataTable。没有必要。这是一个毫无意义的抽象。您可以将IEnumerable
个对象直接绑定到GridView。这允许您利用strongly typed个对象。
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/resumes") + FileUpload1.FileName);
}
LoadResumes();
}
protected void LoadResumes()
{
var resumeFiles = new List<FileInfo>();
foreach (string strFile in Directory.GetFiles(Server.MapPath("~/resumes")))
{
var fi = new FileInfo(strFile);
resumeFiles.Add(fi);
}
ResumesGridView.DataSource = resumeFiles;
ResumesGridView.DataBind();
}
您的GridView需要进行调整。
<asp:GridView id="ResumesGridView" runat="server" ItemType="System.IO.FileInfo" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Extension" HeaderText="File Extension" />
<asp:TemplateField HeaderText="File Extension Stongly Typed">
<ItemTemplate>
<asp:Label runat="server" Text="<%#: Item.Extension %>" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
注意我要两次显示扩展名。第一种方式不那么冗长,但不是强类型。如果拼写错误&#34;扩展&#34;例如,您将在运行时收到错误,而不是编译时。第二种方式,它知道Item
属于ItemType
指定的类型,因此如果我们拼错Extension
它可能会在编译时失败,它也可以给我们智能感知代码完成。快速失败会更好。