我有一个文件上传控件和一个按钮:
<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;
如果上传者没有任何文件,则为空。
第二个问题是我如何获得可以传递名为
的函数的文件 writetoven();
任何帮助?
答案 0 :(得分:1)
在将文件名分配给变量“name”之前,您必须通过其属性“HasFile”检查上传控件是否有文件,您可以从以下链接中看到最佳示例: http://asp-net-example.blogspot.in/2008/10/fileupload-control-example.html
答案 1 :(得分:0)
首先,请确保您在表单标记中使用enctype=multipart/form-data
。这将允许将文件上传控件发布到asp.net服务器,您将开始在venfileupld.PostedFile
对象和其他属性中接收数据。
使用venfileupld.HasFile
和venfileupld.ContentLength
属性确保文件已上传且不是0kb。
- 更新 -
根据您使用更新面板的事实,您可以尝试添加回发触发器,例如
<Triggers> <asp:PostBackTrigger ControlID="btnUploadControlId" /> </Triggers>
-----更新结束----
如果这不能解决您的问题,请添加更多详细信息。
答案 2 :(得分:0)
您是否将ASP.NET Ajx与UpdatePanel一起使用? ... 是的我正在使用ajax和updatepanel
FileUpload在UpdatePanel
内无效。您必须使用AsyncFileUpload中的ASPNET AJAX control Toolkit。
点击此处了解更多详情: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
}
}
答案 3 :(得分: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>
希望这有帮助。