7
@using (Html.BeginForm("Upload", "MyProfile", FormMethod.Post, new
{
    @encType = "multipart/form-data",
    id = "ImgForm",
    name = "ImgForm",
    target = "UploadTarget"
}))
{   
    <input type="file" name="FileUpload" class="filestyle-notext fileupload">                
}

<iframe id="UploadTarget" name="UploadTarget" style="position: absolute; left: -999em; top: -999em;"></iframe>

そして、javascript / jqueryを介して、ファイル入力の変更時にフォーム送信を行っています。

$('.myprofile .fileupload').change(function () {       
    $('#ImgForm').submit();
});

エラーがスローされます:アクセスが拒否され、IE(私はie8を使用しています)でのみ発生し、Firefox、Chromeで正常に動作します。

フォーラムで読んだ後、セキュリティ上の理由からIEのjavasriptを介したフォーム送信に問題があることがわかりましたが、回避策はありますか?そして、すべてのブラウザがそれをサポートしているのに、なぜIEだけがそれを行うのか理解できません。IEはすべてのブラウザよりも安全ですか?;)提案をプールしてください。

4

1 に答える 1

10

.submit()IE8は、このファイル入力のイベント内からのファイル入力を含むフォームのイベントの呼び出しをサポートしていません.change()。これはセキュリティ上の理由によるものです。ユーザーが明示的に許可せずにサーバーにファイルを送信しようとしています。.submit()考えられる回避策の1つは、配置したボタンの.click()イベント内からフォーム上でを呼び出すことです。

$('.uploadButton').click(function () {       
    $('#ImgForm').submit();
});

これで、ユーザーがアップロードボタンをクリックすると、フォームが送信されます。

これはIE8でのみ問題になることを言及する価値があります。より高いバージョンおよび他のブラウザには、この制限はありません。

また、 UploadifyBlueImp FileuploadなどのFlashベースのアップロードコントロールを使用して、クロスブラウザ方式でファイルをサーバーにアップロードすることを検討することもできます。

于 2012-12-01T06:29:20.140 に答える