9

ASP Web サイトでアップロード機能を使用しています。だから私はファイル入力タイプを使用しています。ただし、このコントロールは、デフォルトのアップロード ボタンの参照と、Internet Explorer でファイルを選択した後にパスが表示されるテキスト ボックスを追加します。参照ボタンなどを表示したくないので、「ファイルを添付」ボタンを追加し、スクリプト「triggerFileUpload」関数を作成して、アップロードコントロールをクリックするようにしました。そのため、[ファイルを添付] ボタンをクリックすると、ファイル ウィンドウの参照が表示され、アップロードするファイルを選択できます。しかし、送信ボタンをクリックすると、ファイルのアップロード コントロールがリセットされ、ファイルがアップロードされません。エラーは、ボタンをクリックして送信すると、ファイル コントロールが null になることです。Internet Explorer でのみ発生します。だから、これを解決するのを手伝ってください。以下は、IEで直面している問題を示すコードです。asp:FileUpload コントロールも使用すると、同じ問題が発生します。(私の計画は、ファイル コントロールを非表示にして、ファイルの添付ボタンのみをユーザーに表示することです)。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" 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>
    <script type="text/javascript">
      function triggerFileUpload() {
          document.getElementById("FileUploaddd2").click();
      }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input id="Button2" type="button" onclick="triggerFileUpload()" value="Attach a File" />
     <input type="file" id="FileUploaddd2" runat="Server" />
     <br />
    <asp:Button ID="btnSubmit" runat="server" BorderColor="Black" 
                            BorderStyle="Solid" BorderWidth="1px"
                            Text="Submit" />
    </div>
    </form>
</body>
</html>

サンプルコードのダウンロードはこちら

アップデート

私が直面しているエラーを再現するには

1)ダウンロードリンクで指定したプロジェクトを実行します

2) Internet Explorer の任意のバージョンでテストする

3) [ファイルの添付] ボタンをクリックします (参照ではなく、false を表示するためのものです。ここでは例としてのみ示しています)。

4) 表示されるウィンドウでファイルを参照し、[OK] をクリックします。

5) [保存] ボタンをクリックします。

保存ボタンをクリックすると、btnsave_Click関数がトリガーされるはずですが、トリガーされません.保存ボタンをもう一度クリックすると、btnsave_Clickがトリガーされます.しかし、今回はアップロードコントロールでファイルが選択されていません.ブラウズ コントロールも (これを表示するためだけに、ブラウズ コントロールを表示可能にしました)

では、なぜ btnsave_Click が初めてトリガーされないのか疑問に思うでしょうか?

4

4 に答える 4

1

質問を誤解したかどうかはわかりませんが、そうしてください。

triggerFileUpload() {
      document.forms[0].submit();
}
于 2013-09-23T01:37:42.077 に答える
1

クリックが機能していることは確かですか? Javaスクリプトコードを正しく書いていないと思うからです。

ClientIDJavaスクリプトでファイルアップロードのを取得する必要があります

このような:

document.getElementById('<%=  FileUploaddd2.ClientID %>').click();

更新後、コードを正常に実行できました...

サーバー側コードのifブロック内のtry catchブロックの後にこの行を追加する必要があると思います...

    Try
        sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName)
        'saving the file
        FileUpload1.SaveAs("c:\SaveDirectory\" + FileUpload1.FileName)
        'Showing the file information
        sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName)
        sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType)
        sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength)
        sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName)
    Catch ex As Exception
        sb.Append("<br/> Error <br/>")
        sb.AppendFormat("Unable to save file <br/> {0}", ex.Message)
    End Try
    lblmessage.Text = sb.ToString()

更新後

Internet Explorerに関するアップデートを見た後。あなたの問題はこれだと思います:

javascript を使用して input type="file" のクリックをシミュレートする

これも役立つかもしれません:イベント実行前のブラウザチェック

Ajax Control Toolkit の AjaxFileUpload を使用して表示を改善することもできます。ドラッグ アンド ドロップなどの機能は既に実装されています。この方法では、ボタンのクリックをシミュレートする必要はありません。

于 2013-09-12T04:34:24.853 に答える