2

我在 ASP.net 中使用 FileUpload 控件。格式化输入按钮是如此痛苦,以至于我试图通过使用一个简单的(格式化的)按钮来激活一个单击 FileUpload 控件的 jQuery 函数来解决这个问题。这是我的格式化按钮,称为 btn_upload_FILE:

<asp:Button ID="btn_upload_FILE" runat="server" class="c_button" Text="Import an EDD" OnClick="Main" />

这是 FileUpload 控件:

<asp:FileUpload runat="server" ID="FILE_uploader"></asp:FileUpload> 

这是jQuery:

$('#<%= btn_upload_FILE.ClientID %>').click(function () {
     $('#<%= FILE_uploader.ClientID %>').click();
});

超级简单,而且效果很好,它会打开一个文件浏览器并让我选择一个文件。

问题是,即使 FileUpload 控件似乎正在工作,我选择的文件实际上并没有加载到 FileUpload 控件中,所以我的代码隐藏无法看到它。看起来它正在工作,但 FileUpload 最终为空。FileUpload 的 .change 事件没有被触发,所以我知道什么都没有发生。如果我只是按下 FileUpload 控件的按钮,它就可以正常工作。

谁能告诉我为什么 FileUpload 没有收到文件,即使我可以浏览它?一如既往地感谢任何帮助。

4

2 回答 2

3

要使用 FileUpload 上传文件,您需要进行完整的回发,因此您必须使用一个按钮:

<asp:Button ID="btn_upload_FILE" runat="server" class="c_button" Text="Import an EDD" OnClick="Main" />
<asp:FileUpload runat="server" ID="FILE_uploader"></asp:FileUpload> 

在后面的代码中,按钮的 Main 方法:

protected void Main(object sender, EventArgs e)
{
    // Specify the path on the server to
    // save the uploaded file to.
    String savePath = @"c:\temp\uploads\";

    // Before attempting to perform operations
    // on the file, verify that the FileUpload 
    // control contains a file.
    if (FILE_uploader.HasFile)
    {
        // Get the name of the file to upload.
        String fileName = FILE_uploader.FileName;

        // Append the name of the file to upload to the path.
        savePath += fileName;


        // Call the SaveAs method to save the 
        // uploaded file to the specified path.
        // This example does not perform all
        // the necessary error checking.               
        // If a file with the same name
        // already exists in the specified path,  
        // the uploaded file overwrites it.
        FileUpload1.SaveAs(savePath);

        // Notify the user of the name of the file
        // was saved under.
        UploadStatusLabel.Text = "Your file was saved as " + fileName;
    }
    else
    {
        // Notify the user that a file was not uploaded.
        UploadStatusLabel.Text = "You did not specify a file to upload.";
    }

}

您将在MSDN中找到更多信息。

希望能帮助到你!

编辑:

您也可以使用 jquery。首先,通过将它的 display 属性设置为 none 来隐藏 asp:button:

<asp:Button ID="btn_upload_FILE" runat="server" class="c_button" Text="Import an EDD" OnClick="Main" Style="display:none" />

现在添加 jquery 以在 FileUpload 中有文件时触发此按钮的单击事件:

 <script type="text/javascript">
       $(document).ready(function () {
               $(document).on('change', '#<%= FILE_uploader.ClientID %>', function () {
               if (document.getElementById('<%= FILE_uploader.ClientID %>').files.length === 0) {
                   return;
               }
               $('#<%= btn_upload_FILE.ClientID %>').trigger('click');
           });
       });
   </script>

并且不要忘记在页面顶部添加对 jquery 的引用。

于 2013-09-11T01:07:12.490 回答
0

您的 Form 的 Enctype 是否设置为“multipart/form-data”?

protected void Page_Load(object sender, EventArgs e)
{
    this.Page.Form.Enctype = "multipart/form-data";
}
于 2013-09-11T00:42:24.057 回答