C# 动态生成的文件上载可以';我不能给出选择

C# 动态生成的文件上载可以';我不能给出选择,c#,asp.net,file-upload,controls,findcontrol,C#,Asp.net,File Upload,Controls,Findcontrol,我正在我的ASPX页面动态添加一些控件。我需要动态添加它们,因为控件的数量取决于数据库记录 我正在使用UpdatePanel动态添加控件,如下所示: void AddFileUploadFields() { for (int i = 0; i < Helper.uploadFieldsCount; i++) { FileUpload fileUpload = new FileUpload(); string controlId = DateT

我正在我的
ASPX
页面动态添加一些控件。我需要动态添加它们,因为控件的数量取决于数据库记录

我正在使用
UpdatePanel
动态添加控件,如下所示:

void AddFileUploadFields()
{
    for (int i = 0; i < Helper.uploadFieldsCount; i++)
    {
        FileUpload fileUpload = new FileUpload();
        string controlId = DateTime.Now.Ticks.ToString();
        Thread.Sleep(10); // for non-equal ID for each control
        fileUpload.ID = controlId;
        uploadFormsId.Add(controlId);

        UpdatePanel1.ContentTemplateContainer.Controls.Add(fileUpload);
        PlaceHolder1.Controls.Add(fileUpload);
     }
}
void AddFileUploadFields()
{
对于(int i=0;i
然后,从asp标记中静态定义的按钮
中,我尝试处理要上载的文件信息:

void buttonUpload_Click(object sender, EventArgs e)
{
    var iEnum = uploadFormsId.GetEnumerator();
    List<UploadFormDetails> uploadsInfo = new List<UploadFormDetails>();
    List<string> generatedFileNames = new List<string>();
    bool wereErrors = false;

    while (iEnum.MoveNext())
    {
        FileUpload uploadForm = (FileUpload)FindControl(iEnum.Current.ToString());
        uploadsInfo.Add(new UploadFormDetails(uploadForm.ID, uploadForm.HasFile, uploadForm.FileName));
    }
...
}
void按钮点击(对象发送者,事件参数e)
{
var iEnum=uploadFormsId.GetEnumerator();
List uploadsInfo=新列表();
List generatedFileNames=新列表();
bool-wereErrors=false;
while(iEnum.MoveNext())
{
FileUpload uploadForm=(FileUpload)FindControl(iEnum.Current.ToString());
uploadsInfo.Add(新的UploadFormDetails(uploadForm.ID,uploadForm.HasFile,uploadForm.FileName));
}
...
}
主要问题确实出现在这里:

FileUpload uploadForm=(FileUpload)FindControl(iEnum.Current.ToString())

当我获得这样的控制时,它的所有选项,如
.HasFile
.FileName
都无法查看。它看起来就像一个没有保存选项的新控件。当然,我正在为测试选择一些文件,请不要认为我试图从空表单上传


我怎样才能修好它?我不能上传任何文件…

我找到了一个解决方案,但我得到的结果是以另一种方式设计的,它不使用ASP.NET的
服务器控件,我处理了简单的
HTML
元素

在ASPX页面中,我定义了:

<%
    for (int i = 0; i < Helper.uploadFieldsCount; i++)
    {
        Response.Write("<input type='file' id='uploadField" + i.ToString() + "' name='uploadField" + i.ToString() + "' class='file_1' /><br />");
    }
%>
codebeahind
中,我正在上载一个新文件,其中包含基于
GUID
随机生成的名称:

void buttonUpload_Click(object sender, EventArgs e)
{
    List<string> generatedFileNames = new List<string>();
    bool wereErrors = false;

    for (int i = 0; i < Helper.uploadFieldsCount; i++)
    {
        HttpPostedFile filePosted = Request.Files["uploadField" + i.ToString()];

        if (filePosted != null && filePosted.ContentLength > 0)
        {
            string fileNameApplication = System.IO.Path.GetFileName(filePosted.FileName);
            string fileExtensionApplication = System.IO.Path.GetExtension(fileNameApplication);
            string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
            string filePath = System.IO.Path.Combine(Server.MapPath("uploads"), newFile);

            if (fileNameApplication != String.Empty)
            {
                generatedFileNames.Add(newFile);
                filePosted.SaveAs(filePath);
            }
       }
...
void按钮点击(对象发送者,事件参数e)
{
List generatedFileNames=新列表();
bool-wereErrors=false;
对于(int i=0;i0)
{
字符串fileNameApplication=System.IO.Path.GetFileName(filePosted.FileName);
字符串fileExtensionApplication=System.IO.Path.GetExtension(fileNameApplication);
字符串newFile=Guid.NewGuid().ToString()+文件扩展应用程序;
字符串filePath=System.IO.Path.Combine(Server.MapPath(“上传”),newFile);
if(fileNameApplication!=String.Empty)
{
generatedFileNames.Add(newFile);
filePosted.SaveAs(文件路径);
}
}
...
void buttonUpload_Click(object sender, EventArgs e)
{
    List<string> generatedFileNames = new List<string>();
    bool wereErrors = false;

    for (int i = 0; i < Helper.uploadFieldsCount; i++)
    {
        HttpPostedFile filePosted = Request.Files["uploadField" + i.ToString()];

        if (filePosted != null && filePosted.ContentLength > 0)
        {
            string fileNameApplication = System.IO.Path.GetFileName(filePosted.FileName);
            string fileExtensionApplication = System.IO.Path.GetExtension(fileNameApplication);
            string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
            string filePath = System.IO.Path.Combine(Server.MapPath("uploads"), newFile);

            if (fileNameApplication != String.Empty)
            {
                generatedFileNames.Add(newFile);
                filePosted.SaveAs(filePath);
            }
       }
...