2012-12-01 34 views
6
@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,我正在对表单提交文件输入的更改。当通过javascript提交表单时,在IE中拒绝访问错误

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

它抛出一个错误:访问被拒绝,这种事只有在IE浏览器(我使用IE8)和火狐,Chrome工作正常。

在论坛上我看到有一个与形式的问题,通过javasript在IE提交由于安全方面的原因,但有没有什么解决办法看完之后?我不明白为什么当所有的浏览器都支持它时,只有IE才会这么做。 IE比所有浏览器更安全吗? ;)请在您的建议中汇集。

+0

我的第一个想法是禁用保护模式。 – mrtsherman

+3

* IE浏览器比所有浏览器更安全吗?*大声笑...厚颜无耻。 – McGarnagle

回答

9

IE8不支持调用此文件输入的.change()事件中包含文件输入的表单的.submit()事件。这是出于安全原因。您正在尝试将文件提交给服务器,而用户没有明确允许这样做。一个可能的解决方法是调用窗体上的.submit()一些按钮的。点击()事件中你已经放置:

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

现在,当用户点击一些上传按钮的形式将提交。

值得一提的是,这仅仅是与IE8的问题。更高版本和其他浏览器不具有此限制。

另外,您可以考虑使用基于Flash的上传控件(例如UploadifyBlueImp File upload)以跨浏览器的方式将文件上传到服务器。

+0

值得注意的是,这仍然是IE10中的一个问题,试图欺骗它不起作用。您无法通过代码调用点击事件。 –