1

我有一个文件上传控件和一个按钮:

<asp:FileUpload ID="venfileupld" runat="server" />
<asp:Button ID="venupld1" runat="server" Text="Upload" OnClick="venupld1_Click" />

在按钮单击事件中,我这样做:

string name = venfileupld.PostedFile.FileName;

    string filepath = Server.MapPath("upload_excel/") + name;
    venfileupld.PostedFile.SaveAs(filepath);

 writetoven();

但这给了我一个错误。

我的第一个问题是为什么我在线上出现错误:

string name = venfileupld.PostedFile.FileName;

上传者没有任何文件是 null 。

第二个问题是我如何获得可以传递给名为的函数的文件:

 writetoven();

有什么帮助吗?

4

4 回答 4

1

在将文件名分配给变量“name”之前,您必须通过其属性“HasFile”检查上传控件是否具有文件,您可以从以下链接中看到最佳示例:http: //asp-net-example.blogspot.in/2008/10 /fileupload-control-example.html

于 2012-11-19T11:30:10.920 回答
0

您是否将 ASP.NET Ajx 与 UpdatePanel 一起使用?...是的,我正在使用 ajax 和 updatepanel

FileUploadUpdatePanel. 您必须使用ASPNET AJAX 控件工具包中的AsyncFileUpload

在这里查看更多详细信息:http: //knowledgebaseworld.blogspot.de/2009/02/file-upload-not-working-with-update.html

您应该处理控件的UploadedComplete事件AsyncFileUpload

private static List<string> allowedExtensions = new List<string>(new string[] {
".xls",
".xlsx"
});

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    if (e.state == AjaxControlToolkit.AsyncFileUploadState.Success) {
        string fileExt = System.IO.Path.GetExtension(e.filename);
        if (allowedExtensions.Contains(fileExt)) {
            string fileName = System.IO.Path.GetFileName(e.filename);
            string dir = Server.MapPath("upload_excel/");
            string path = Path.Combine(dir, fileName);
            AsyncFileUpload1.PostedFile.SaveAs(path);
            AsyncFileUpload1.FileContent.Close();
        } else {
            // wrong extension
        }
    } else {
        // log and show error
    }
}
于 2012-11-19T11:29:40.983 回答
0

尝试以下:

后面的代码:

protected void venupld1_Click(object sender, EventArgs e)
    {
        string name = venfileupld.FileName;
        string filepath = Server.MapPath("~/upload_excel/") + name;
        venfileupld.PostedFile.SaveAs(filepath);
     }

内联代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"  UpdateMode="conditional">
    <ContentTemplate>
    <asp:FileUpload ID="venfileupld" runat="server" />
    <asp:Button ID="venupld1" runat="server" Text="Upload" OnClick="venupld1_Click" />
    </ContentTemplate>
    <Triggers>
    <asp:PostBackTrigger ControlID="venupld1" />
    </Triggers>
 </asp:UpdatePanel>

希望这可以帮助。

于 2012-11-19T11:46:12.283 回答
0

首先,确保您enctype=multipart/form-data在表单标签中使用。这将允许将文件上传控件发布到 asp.net 服务器,并且您将开始接收venfileupld.PostedFile对象和其他属性中的数据。

使用venfileupld.HasFilevenfileupld.ContentLength属性确保文件已上传并且不是 0kb。

- 更新 -

基于您正在使用更新面板的事实,您可以尝试添加回发触发器,例如

<触发器>
  <asp:PostBackTrigger ControlID="btnUploadControlId" />
 </触发器>

-----更新结束----

如果这不能解决您的问题,请添加更多详细信息。

于 2012-11-19T11:25:02.100 回答