功能要求:要上传多个文件,所以想先选择文件,最后一起上传。
做法:在客户端触发文件上传控件的click事件,实现文件的选择。(现在的代码是选一个文件的)
代码:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!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">
    <title>Title</title>
    <script type="text/javascript" language="JavaScript"> 
    function Add(){
        document.form1.fud.click();    }
    </script>
</head>
<body>
    <form id="form1" method="post" enctype="multipart/form-data" runat="server">
    <div>
        <input id="Button1" type="button" value="select" onclick="Add()" />
        <input id="Submit1" type="submit" value="submit" />&nbsp;&nbsp;
        <input id="fud" type="file" runat="server" style="display:none" /> 
        <asp:Button ID="btn" runat="server" Text="Input" OnClick="btn_Click" /></div>
    </form>
</body>
</html>Default.aspx.cspublic partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            btn.Attributes.Add("onclick", "Add()");
        }
        if (fud.PostedFile != null)
        {
            string str = fud.PostedFile.FileName;
        }
    }
    protected void btn_Click(object sender, EventArgs e)
    {
        if (fud.PostedFile != null)
        {
            string str = fud.PostedFile.FileName;
        }
    }
}问题:
1、先点select,选择文件,然后点submit,第一次没反应,第二次可以提交画面,但是page_load里的str是空。我把文件上传控件改成可显示的发现,第一次只是把选到的文件名清空了。并不提交画面。
2、点input,可以选择文件,但是不执行后台代码。请教各位,如何才能取到要上传的文件?

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4900/4900720.xml?temp=.2924463思归,孟子和我的解决方法可以看一下
      

  2.   

    可以显示多个上传框<%@ Control Language="vb" AutoEventWireup="false" Codebehind="UploadBox.ascx.vb" Inherits="LHA.CKTS.UploadBox" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <script type="text/javascript"> function ylib_getObj(id,d)
    {
    var i,x;  if(!d) d=document; 
    if(!(x=d[id])&&d.all) x=d.all[id]; 
    for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][id];
    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=ylib_getObj(id,d.layers[i].document);
    if(!x && document.getElementById) x=document.getElementById(id); 
    return x;
    };

    var nextHiddenIndex = 5;

    function AddFileInput()
    {
    ylib_getObj("fileInput" + nextHiddenIndex).style.display = document.all ? "block" : "table-row";
    nextHiddenIndex++;
    if(nextHiddenIndex >= 10) ylib_getObj("attachMoreLink").style.display = "none";
    }

    </script>
    <table style="MARGIN:1em 0px">
    <tr valign="top" id="fileInput0">
    <td><b>文件 1:</b></td>
    <td><INPUT id="UploadFile1" type="file" size="40" name="UploadFile1" runat="server">
    </td>
    </tr>
    <tr valign="top" id="fileInput1">
    <td><b>文件 2:</b></td>
    <td><INPUT id="UploadFile2" type="file" size="40" name="UploadFile2" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput2">
    <td><b>文件 3:</b></td>
    <td><INPUT id="UploadFile3" type="file" size="40" name="UploadFile3" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput3">
    <td><b>文件 4:</b></td>
    <td><INPUT id="UploadFile4" type="file" size="40" name="UploadFile4" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput4">
    <td><b>文件 5:</b></td>
    <td><INPUT id="UploadFile5" type="file" size="40" name="UploadFile5" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput5" style="DISPLAY:none">
    <td><b>文件 6:</b></td>
    <td><INPUT id="UploadFile6" type="file" size="40" name="UploadFile6" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput6" style="DISPLAY:none">
    <td><b>文件 7:</b></td>
    <td><INPUT id="UploadFile7" type="file" size="40" name="UploadFile7" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput7" style="DISPLAY:none">
    <td><b>文件 8:</b></td>
    <td><INPUT id="UploadFile8" type="file" size="40" name="UploadFile8" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput8" style="DISPLAY:none">
    <td><b>文件 9:</b></td>
    <td><INPUT id="UploadFile9" type="file" size="40" name="UploadFile9" runat="server"></td>
    </tr>
    <tr valign="top" id="fileInput9" style="DISPLAY:none">
    <td><b>文件 10:</b></td>
    <td><INPUT id="UploadFile10" type="file" size="40" name="UploadFile10" runat="server"></td>
    </tr>
    </table>
    <P>
    <a id="attachMoreLink" href="javascript:AddFileInput()">附加更多文件</a>
    </P>
    <P>
    <asp:Button id="btnSubmit" runat="server" Text="上传文件"></asp:Button><FONT face="宋体">&nbsp;
    </FONT><INPUT type="button" onClick="javascript:history.back(-1);" value="取  消"></P>
      

  3.   

    后台代码片段:    Public ReadOnly Property FileCount() As Integer
            Get
                Dim i As Integer
                Dim c As Control
                Dim f As HtmlInputFile
                _fileCount = 0
                For Each c In Me.Controls
                    If TypeOf c Is HtmlInputFile Then
                        f = CType(c, HtmlInputFile)
                        If (Not (f.PostedFile Is Nothing)) AndAlso (f.PostedFile.FileName <> "") Then
                            If isTargetFile(f.PostedFile) Then
                                _fileCount += 1
                            End If
                        End If
                    End If
                Next
                Return _fileCount
            End Get
        End Property    Public ReadOnly Property Files(ByVal index As Integer) As HttpPostedFile
            Get
                Dim i As Integer = 0
                Dim c As Control
                Dim f As HtmlInputFile
                For Each c In Me.Controls
                    If TypeOf c Is HtmlInputFile Then
                        f = CType(c, HtmlInputFile)
                        If (Not (f.PostedFile Is Nothing)) AndAlso (f.PostedFile.FileName <> "") Then
                            If isTargetFile(f.PostedFile) Then
                                i += 1
                                If i = index Then
                                    Return f.PostedFile
                                End If
                            End If
                        End If
                    End If
                Next
            End Get
        End Property
    ---------------------------------
            For i = 1 To FileCount
                UploadRequestFile(Files(i))
            Next
      

  4.   

    只能生成多个input file对象来做
      

  5.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=58EA3515-36F2-4FD9-AC89-EAF49F59816C
      

  6.   

    不显示上传控件是不可能的,选择文件时必须显示(ActiveX除外),这是基于安全性的考虑。
    但像163邮箱之类的,实现了从一个上传控件选择文件,把文件放到列表中,然后选择下一个文件,....。最后发送时把所有选择的文件一起发送,不知道是怎么实现的。
      

  7.   

    楼主的的问题我没有完全看懂在什么,可能需要再写简单点。不过有一点很清楚,在ie下如果想通过代码改变value属性,例如给<input type="file>对象设置value,或者以下代码:<div id="xxx">afdasdf</div><script language="javascript">
    var dv = document.getElementById('xxx');
    var file = document.createElement("input");
    file.type = "file";
    file.value="c:\windows\regedit.exe";
    dv.appendChild(file);
    file.value="c:\windows\regedit.exe";
    </script>中间的设置value属性都是扯淡,ie还算是比较安全的浏览器。