fileupload.hasfile返回false?原因分析与解决指南!

吉云

今天跟大家聊聊我昨天遇到的一个坑,关于`*`的。说起来挺简单的,但是真要碰上,也够你挠头的。

事情是这样的,昨天在做一个文件上传的功能,前端用*的`FileUpload`控件,后端判断是否有文件上传,就直接用`*`这个属性。看起来没啥问题?

结果!

fileupload.hasfile返回false?原因分析与解决指南!

死活都是`false`! 明明前端都选文件,传到后端,`HasFile`就是`false`,搞得我一脸懵逼。

  • 第一步:我开始怀疑是不是前端控件的问题,仔细检查`FileUpload`控件的设置,确保`runat="server"`没问题,`ID`也没写错。
  • 第二步:然后我就怀疑是不是UpdatePanel的问题,因为项目里用AJAX,`FileUpload`控件放在`UpdatePanel`里面。网上搜一圈,发现很多人说`UpdatePanel`和`FileUpload`不兼容,会导致`HasFile`始终为`false`。
  • 第三步: 按照网上的说法,我尝试把`ScriptManager`的`EnablePartialRendering`设为`false`。 结果,确实可以上传! `HasFile`变成`true`。但是!问题来,页面上的其他`UpdatePanel`不能局部刷新,这不行!
  • 第四步: 又搜一圈,发现有个更狠的办法,不用`UpdatePanel`直接用`Iframe`,在`Iframe`里面放`FileUpload`控件。这样虽然能解决问题,但是代码结构变得复杂,而且`Iframe`之间传值也挺麻烦的。
  • fileupload.hasfile返回false?原因分析与解决指南!

柳暗花明

折腾半天,差点就要放弃。突然,我想起来之前遇到过类似的问题,好像是跟表单的编码类型有关。于是我赶紧检查一下`form`标签,发现果然!少`enctype="multipart/form-data"`这个属性!

加上这个属性之后,一切都正常! `*`终于变成`true`!

这回的教训就是:

    fileupload.hasfile返回false?原因分析与解决指南!

  • 永远不要忘记检查`form`标签的`enctype`属性! 特别是在处理文件上传的时候。
  • 如果用`UpdatePanel`,而且`HasFile`始终为`false`,可以尝试把`ScriptManager`的`EnablePartialRendering`设为`false`,或者考虑用`Iframe`。
  • 遇到问题,多搜搜,多试试,总能找到解决办法的。

希望这回的分享能帮到大家,少走弯路!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]