ASP.NET中如何在protected方法间传递上传图片的文件名?
解决ASP.NET中跨Protected方法传递上传文件名的问题
我来帮你搞定这个问题~你现在遇到的核心问题是:ASP.NET的FileUpload控件在页面回传后,它的FileName值会丢失,所以直接在submit方法里取FileUpload1.FileName是拿不到之前上传的文件名的。下面给你几个实用的方案,按需选择:
方案1:使用ViewState(推荐同一页面内传递)
ViewState是ASP.NET用来保存页面状态的机制,适合在同一个页面的不同回传方法间传递数据,不会占用服务器会话资源。
修改你的代码如下:
protected void Upload1(object sender, EventArgs e) { //Extract Image File Name. string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); //Set the Image File Path. string filePath = "~/Uploads/" + lblTdcNo.InnerText + "1" + lblRevision.InnerText; //Save the Image File in Folder. FileUpload1.PostedFile.SaveAs(Server.MapPath(filePath)); gvImages.ImageUrl = "~/Uploads/" + Path.GetFileName(FileUpload1.FileName); // 把文件名存入ViewState ViewState["UploadedFileName"] = fileName; } protected void submit(object sender, EventArgs e) { // 从ViewState取出文件名,记得做空值判断 string img1 = ViewState["UploadedFileName"] as string; if (!string.IsNullOrEmpty(img1)) { // 这里写你保存img1的逻辑 } }
方案2:使用Session(适合跨页面或长时间保留状态)
如果你的submit操作可能涉及跳转到其他页面,或者需要在多个请求间保留文件名,可以用Session。但注意用完要清理Session,避免占用服务器资源。
修改代码:
protected void Upload1(object sender, EventArgs e) { string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); string filePath = "~/Uploads/" + lblTdcNo.InnerText + "1" + lblRevision.InnerText; FileUpload1.PostedFile.SaveAs(Server.MapPath(filePath)); gvImages.ImageUrl = "~/Uploads/" + Path.GetFileName(FileUpload1.FileName); // 存入Session Session["UploadedFileName"] = fileName; } protected void submit(object sender, EventArgs e) { string img1 = Session["UploadedFileName"] as string; if (!string.IsNullOrEmpty(img1)) { // 保存逻辑 // 用完清理Session Session.Remove("UploadedFileName"); } }
方案3:使用隐藏字段(适合需要和页面HTML交互的场景)
你可以在页面上添加一个服务器端的隐藏字段,把文件名存在里面,回传后就能读取到。
首先在ASPX页面添加控件:
<asp:HiddenField ID="hfUploadedFileName" runat="server" />
然后修改后台代码:
protected void Upload1(object sender, EventArgs e) { string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); string filePath = "~/Uploads/" + lblTdcNo.InnerText + "1" + lblRevision.InnerText; FileUpload1.PostedFile.SaveAs(Server.MapPath(filePath)); gvImages.ImageUrl = "~/Uploads/" + Path.GetFileName(FileUpload1.FileName); // 把文件名存入隐藏字段 hfUploadedFileName.Value = fileName; } protected void submit(object sender, EventArgs e) { string img1 = hfUploadedFileName.Value; if (!string.IsNullOrEmpty(img1)) { // 保存逻辑 } }
这三个方案都能解决你的问题,优先推荐ViewState,因为它是页面级的状态管理,资源开销最小。如果有跨页面需求再考虑Session,隐藏字段则适合需要和前端JS交互的场景~
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

