IE 固有と思われる非常に奇妙な問題が発生しました。
FileUpload コントロールを含むフォームがあります。ただし、(私が知る限り) このコントロールのボタンとテキスト ボックスを個別にスタイル設定することはできないため、ページに 2 番目のボタンを追加して、必要に応じてスタイルを設定しました。このボタンの OnClientClick イベント内で、FileUpload コントロールの [参照] ボタンをクリックするだけで、ファイルを選択できます。次に、ファイルをポストバックしてインポートする「インポート」ボタンがあります。
Chrome と Firefox では、これはすべてうまく機能します。ただし、IE でテストしたところ、初めて [インポート] ボタンをクリックしても、FileUpload コントロールがクリアされる以外は何も起こりません。ボタンをもう一度クリックするとポストバックされますが、アップロードするファイルがありません。クライアントのクリック時にボタンにアラートを設定しましたが、これは発生しますが、ポストバックしません。
ただし、「参照」ボタンを直接使用すると、すべて正常に動作するため、ボタンをクリックする Javascript と関係があるようですが、これがなぜなのかわかりません。また、IE 固有のようです。(IE9)。
これを引き起こしている可能性のあるものと、それを修正する方法を知っている人はいますか?
コードは次のとおりです。
<script>
function SelectFile() {
$("#<%= uplFile.ClientID %>").click();
}
</script>
<asp:Button runat="server" ID="btnSelectFile" OnClientClick="SelectFile();return false;" Text="Select File" />
<asp:FileUpload runat="server" ID="uplFile" Width="250" CssClass="FileUpload" OnChange="ShowSelectedFilename(this.value)" />
<asp:Button runat="server" ID="btnImport" Text="Import" OnClick="btnImport_Click" />
注意:「return false;」なしでも試しました。btnSelectFile ボタンの OnClientClick イベント内。JQueryの代わりにdocument.getElementByIdを使用してクリックを試みましたが、同じ問題が発生しました。
どんな助けでも大歓迎です。
アップデート:
私が得ている他のエラー(たとえば、プログラムでフォームを送信しようとしたり、インポートボタンをクリックしようとしたときに「アクセスが拒否されました」など)をGoogleでさらに検索すると、これはIEのセキュリティ機能に起因する可能性がありますが、まだ完全には納得していません。
基本的に、正当な理由により、Microsoft は、開発者 (またはハッカー) がアップロード コントロールをいじることを望んでいません。たとえば、JavaScript を使用している開発者が、フォームの送信時に、ユーザーが選択したファイルの名前を「c:\mysecretfile.txt」に変更できるようにしたくないため、単にクライアントから好きなファイルをアップロードします。ただし、実際にはファイル名を変更しているわけではありません。プログラムで「参照」ボタンをクリックするだけで、そこからユーザーが自分でクリックした場合と同じように機能しますが、すべて同じことを行うことを期待しています.
誰かが違うことを知らない限り?