FileUpload.HasFile ,无论如何都是false。应该怎么解决,并未包含UpdatePanel等,只是最简单的一个页面。

 我来答
匿名用户
2011-03-24
展开全部
,回调时发现上其属性hasfile为false。解决方案如下:
方案一、如果将scriptmanager的enablepartialrending设为false则可以正确上传,这个方法最简单,但是会有缺 陷,就是在同一个页面上的多个UpdatePanel不可以独自刷新了。另外,当你的UpdatePanel中存在Validator的话,会造成整个页 面postback,这个问题似乎是Altas的一个bug.
方案二、摘自
1:主页面中使用UpdatePanel,然后UpdatePanel里面放置的不是FileUpload控件,而是一个Iframe
2:这个iframe在链接一个新的页面,那个页面里面有FileUpload控件。
3:上传完毕后,告诉主页面上传得结果

先看一个直接使用FileUpload的例子:这个例子里面,服务端是无法找到上传文件的。

<atlas:UpdatePanel ID="up1" Mode="Conditional" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
< SPAN>ContentTemplate>
< SPAN>atlas:UpdatePanel>

看看,我们该如何实现
1:新建主页面Default.aspx
在适当的位置,放置一个上传附件的UpdatePanel区域

<atlas:UpdatePanel ID="up_attachment" Mode="Conditional" runat="server">
<ContentTemplate>
<iframe id="file" name="file" src="attachment.aspx">< SPAN>iframe>
< SPAN>ContentTemplate>
< SPAN>atlas:UpdatePanel>
2:新建上传文件的页面attachment.aspx,然后放上FileUpload控件

<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="OK" OnClick="Button1_Click" />
< SPAN>div>
3:在attachment.aspx里面,上传文件之后调用主页面的js,报告上传情况。这是函数原型:

<script>
window.top.callBack(fileName);
< SPAN>script>
4:Default.aspx主页面里面增加这个函数,处理返回值

<script>
function callBack(fileName)
{
document.getElementById('Attach1').innerHTML=fileName;
}
< SPAN>script>
另外,团IDC网上有许多产品团购,便宜有口碑
henfengduandie
2011-03-23 · TA获得超过653个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:210万
展开全部
参考
在walkghost和asp911的热心帮助下,刚刚把这个问题彻底搞清楚了。
walkghost说的对,有没有加“Response.Write”代码都没有错,但我为什么以前一直没有调试出来呢?原来为了调试这段代码,我自己创建了几个空的word文件,用来测试,FileUpload.HasFile属性非常有趣,当你选择了一个空的文件时,过于聪明的返回了"false",造成了我的困扰。当我发现没有我想要的结果时,我也一度怀疑是不是空文件惹的祸,随后我选了另一个文件用来测试,很凑巧又很不幸,这个文件长达23M,而我没有设置"httpRuntime"的"maxRequestLength"属性,因而同样不成功!这就是折腾了我好几天的一个问题的最终答案。前几天我甚至还怀疑过我的sql server没有装好呢……
在msdn上我又仔细的看了一下,上面说了:如果FileUpload控件上有文件,其HasFile属性返回true,反之返回false。这个文档也写的太语焉不详了,我控件是选了文件了呀,只不过是一个空文件而已,你凭啥认为我没有选择文件呀?我认为这个是该控件设计的一个考虑不周之处,应该让Microsoft知道,不知道下一版的framework有没有把这个修改过来。另外,按照walkghost的方法,在判断HasFile属性前用Response.Write方法显式的写入http输出流,也是可以强制FileUpload控件在哪怕选择了空文件也认为HasFile的。这是一个编程的细微之处,值得我好好体会。
追问
上传的是有内容的文件,而且各种格式我都试过了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-02
展开全部
,回调时发现上其属性hasfile为false。解决方案如下:
方案一、如果将scriptmanager的enablepartialrending设为false则可以正确上传,这个方法最简单,但是会有缺 陷,就是在同一个页面上的多个UpdatePanel不可以独自刷新了。另外,当你的UpdatePanel中存在Validator的话,会造成整个页 面postback,这个问题似乎是Altas的一个bug.
方案二、摘自
1:主页面中使用UpdatePanel,然后UpdatePanel里面放置的不是FileUpload控件,而是一个Iframe
2:这个iframe在链接一个新的页面,那个页面里面有FileUpload控件。
3:上传完毕后,告诉主页面上传得结果

先看一个直接使用FileUpload的例子:这个例子里面,服务端是无法找到上传文件的。

<atlas:UpdatePanel ID="up1" Mode="Conditional" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
< SPAN>ContentTemplate>
< SPAN>atlas:UpdatePanel>

看看,我们该如何实现
1:新建主页面Default.aspx
在适当的位置,放置一个上传附件的UpdatePanel区域

<atlas:UpdatePanel ID="up_attachment" Mode="Conditional" runat="server">
<ContentTemplate>
<iframe id="file" name="file" src="attachment.aspx">< SPAN>iframe>
< SPAN>ContentTemplate>
< SPAN>atlas:UpdatePanel>
2:新建上传文件的页面attachment.aspx,然后放上FileUpload控件

<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="OK" OnClick="Button1_Click" />
< SPAN>div>
3:在attachment.aspx里面,上传文件之后调用主页面的js,报告上传情况。这是函数原型:

<script>
window.top.callBack(fileName);
< SPAN>script>
4:Default.aspx主页面里面增加这个函数,处理返回值

<script>
function callBack(fileName)
{
document.getElementById('Attach1').innerHTML=fileName;
}
< SPAN>script>
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式