再开一贴,动态添加FileUpload的问题

quboxue 2009-03-24 10:33:48
FileUpload a = new FileUpload();
TextBox b = new TextBox();
a = (FileUpload)form1.FindControl("tupian" + i);
b = (TextBox)form1.FindControl("pic_shuoming" + i);
if (a.HasFile) 这行 a.HasFile 总是false

同样添加的控件,b却能获得值,大家帮帮我啊,好长时间了
...全文
455 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
quboxue 2009-03-25
  • 打赏
  • 举报
回复
lonelySurvive 在不在啊?请教个问题
我用了你的程序,但是我这的情况有点不一样,后面要跟一个文本框,前台js好办,后台怎么取值啊
quboxue 2009-03-25
  • 打赏
  • 举报
回复
ASPNET3DBBookSystem 这个是什么啊,用不了啊
quboxue 2009-03-24
  • 打赏
  • 举报
回复
好吧,改用js了
lonelySurvive 2009-03-24
  • 打赏
  • 举报
回复
你是用C#写服务器端的?
我也不知道你为什么动态添加fileupload,但如果要这样做的话可以用JS来实现

我以前写过一个添加多个上传控件,上传文件的东西,发给你参考下,用JS 写的是不存在取不到值的问题


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UploadFiles.aspx.cs" Inherits="UploadFiles" StyleSheetTheme="Aspnet3DBWeb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>同时上载多个文件</title>
<script language="javascript" type="text/javascript">
function addOneFile(maxcount)
{
var file = document.getElementsByName("file");
if(file.length == 1 && file[0].disabled == true)
{ ///如果只存在一个浏览文件的控件,则把该控制设置为可用
file[0].disabled = false;
return;
}
if(file.length < maxcount)
{ ///添加一个浏览文件的控件
var filebutton = '<br /><input type="file" size="50" name="file" />';
document.getElementById('pFileList').insertAdjacentHTML("beforeEnd",filebutton);
}
}
</script>
</head>
<body>
<form id="myForm" runat="server" method="post" enctype="multipart/form-data">
<table border="0" cellpadding="3" cellspacing="1">
<tr>
<td>
<p id="pFileList"><input type="file" disabled="disabled" size="50" name="file" /></p>
<input type="button" value='增加一个文件' onclick="addOneFile(<%= FILEMAXCOUNT %>)" /><span
style="color: red"><font color="red">(最多上传 <%= FILEMAXCOUNT%> 个文件)</font><br /> 
</span>单击此按钮增加一个上传文件按钮。如果文件的名称或者内容为空,则不上传该文件。
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnCommit" runat="server" Text="上载所有文件"
OnClick="btnCommit_Click" /> <asp:Label ID="lbMessage" runat="server" CssClass="Text" ForeColor="Red"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>




using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

///引入新的命名空间

using System.IO;

public partial class UploadFiles : System.Web.UI.Page
{
/// <summary>
/// 每一次最多上载文件的数量
/// </summary>
protected int FILEMAXCOUNT = 4;

protected void btnCommit_Click(object sender,EventArgs e)
{ ///从Request对象中获取上载文件的列表
HttpFileCollection files = HttpContext.Current.Request.Files;
Response.Write(files.Count);
if(files == null) return;


try
{ ///处理文件列表中的每一个文件
for(int i = 0; i < files.Count; i++)
{ ///获取当前上载的文件
HttpPostedFile postedFile = files[i];
if(postedFile == null) continue;
///获取文件的类型和大小
string type = postedFile.ContentType;
int size = postedFile.ContentLength;
///获取文件的名称和扩展名
string fileName = Path.GetFileNameWithoutExtension(postedFile.FileName);
string extension = Path.GetExtension(postedFile.FileName);
///获取基于时间的文件名称
string timeFilename = ASPNET3DBBookSystem.CreateStringByCurrentDateTime();
// Response.Write(timeFilename);
///创建保存文件的虚拟路径
string url = "Files/" + fileName + extension;
///获取全路径
string fullPath = Server.MapPath(url);
///判断是否存在相同名称的文件
if(System.IO.File.Exists(fullPath) == true)
{
lbMessage.Text = "上载文件的已经存在,请重新选择文件!";
return;
}
///上载文件
postedFile.SaveAs(fullPath);
///把上载文件的信息添加到数据库中
//if(file.AddFile(fileName,type,size,url) > 0)
//{
// lbMessage.Text = "恭喜您,上载文件成功!";
//}
}
}
catch(Exception ex)
{ ///显示上载文件的操作失败消息
lbMessage.Text = "上载文件错误,错误原因为:" + ex.Message;
return;
}
}
}
CutBug 2009-03-24
  • 打赏
  • 举报
回复
ajaxpro不行,不能实现无刷新上传,
Anthem.Net封装的FileUpload可以做到
quboxue 2009-03-24
  • 打赏
  • 举报
回复
可是,如果不放到这里面的话,就不能动态添加控件了,真是很烦啊
quboxue 2009-03-24
  • 打赏
  • 举报
回复
不好意思,刚刚知道,我把 控件放到UpdatePanel里面了
claymore1114 2009-03-24
  • 打赏
  • 举报
回复
网页是无状态的
可以考虑 将FIelUPLoad存入Session,再将Session用动态数组ArrayList来装,再读取。

public partial class UploadFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{ ///保存文件控件
SaveFileControl();
}
}
protected void btAddFile_Click(object sender,EventArgs e)
{
tbfilelist.Rows.Clear();
///获取已经存在的文件控件,并添加到tbFileList控件中
GetFileControl();

///创建新的文件控件
HtmlTableRow htr = new HtmlTableRow();
HtmlTableCell htc = new HtmlTableCell();
FileUpload fu = new FileUpload();
htc.Controls.Add(fu);
htr.Controls.Add(htc);
///添加到tbFileList控件中
tbfilelist.Rows.Add(htr);
///保存添加的文件控件
SaveFileControl();
}

/// <summary>
/// 获取已经存在的文件控件
/// </summary>
private void GetFileControl()
{
ArrayList fuList = new ArrayList();
if(Session["FileControlList"] != null)
{
fuList = (ArrayList)Session["FileControlList"];
}
foreach(FileUpload fu in fuList)
{
HtmlTableRow htr = new HtmlTableRow();
HtmlTableCell htc = new HtmlTableCell();
htc.Controls.Add(fu);
htr.Controls.Add(htc);
tbfilelist.Rows.Add(htr);
}
}
/// <summary>
/// 保存添加的文件控件
/// </summary>
private void SaveFileControl()
{
ArrayList fuList = new ArrayList();
foreach(Control c in tbfilelist.Controls)
{ ///判断控件的类型
if(c.GetType() == typeof(HtmlTableRow))
{ ///获取<td>控件
HtmlTableCell htc = (HtmlTableCell)c.Controls[0];
foreach(Control cfu in htc.Controls)
{ ///获取文件控件
if(cfu.GetType() == typeof(FileUpload))
{
fuList.Add(cfu);
}
}
}
}
///保存到Session中
Session["FileControlList"] = fuList;
}

protected void btUpload_Click(object sender,EventArgs e)
{ ///定义提示字符串
StringBuilder sb = new StringBuilder();
sb.Append("上载的文件如下:<br>");

ArrayList filenamelist = new ArrayList();

///保存文件的目录地址
string filepath = Server.MapPath("dir/");
///获取上载的文件列表
HttpFileCollection fileList = Request.Files;
for(int i = 0; i < fileList.Count; i++)
{ ///获取单个文件
HttpPostedFile file = fileList[i];
if(file.ContentLength > 0)
{
try
{
string filename = Path.GetFileName(file.FileName);

///判断文件是否存在
if(File.Exists(filepath + filename) == false)
{ ///上载文件
file.SaveAs(filepath + filename);
sb.Append(file.FileName + "<br>");
filenamelist.Add(filename);
}
}
catch(Exception ex)
{
Response.Write(ex.Message + "<br>");
}
}
}
///显示提示信息
sb.Append("上载的文件保存在目录dir下。");
Response.Write(sb);
///清空Session中的文件控件信息
if(Session["FileControlList"] != null)
{
Session.Remove("FileControlList");
}

Session["FileNameList"] = filenamelist;
}
}

quboxue 2009-03-24
  • 打赏
  • 举报
回复
高手路过帮帮我吧
quboxue 2009-03-24
  • 打赏
  • 举报
回复
有人在吗?自己顶上来了

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧