日期:2014-05-18  浏览次数:20443 次

关于Asp.net的updatePanel和fileupload,以及panel控件问题.....
本人刚刚开始接触asp.net,遇到一个比较模糊的问题,请高人指教.
大概框架是
<UpdatePanel>
 <Button1></Button1>
 <Panel visable=false>
  <FileUpload></FileUpload>
  <Button2></Button2>
 </Panel>
</UpdatePanel>
Button2加入了UpdatePanel的PostBackTrigger;
但由于Panel是不可见得.需要手动通过Button1来使Panel.Visable=TRUE 
问题来了,当页面加载完毕,然后手动点击Button1显示Panel及其FileUpload,接着点击Button2来测试FileUpload.Hasfile,发现为空.
如果去掉panel.visable=false的属性.则完全正常.
这时,可以判断是与fileupload的postback有关吧
但如果不去掉panel.visable=false的属性,而是在UpdatePanel前,显示的加一个fileUpload控件,即使不用,但最后也能得到正常值.....

感觉问题出在这里,但就是不能理解到底是怎么回事,但估计跟生命周期有关系,请高手指点指点.....

------解决方案--------------------
UpdatePanel不支持FileUpload.

UpdatePanel中的内容是通过XmlHttp实时填充的,在你让他显示之前,查看页面源代码里面是空的。一个动态控件更新普通数据没问题,但上传文件就不行了,

我的解决办法是用普通div代替asp:Panel,并个函数来动态发送控制脚本,按钮事件中只要调用该函数即可:
<div id="Panel1"></div> 

C# code

private void ShowPanel() 
{ 
string script = "document.getElementById('Panel1').style.display='';"; 
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "ShowPanel", script, true); 
} 
private void ClosePanel() 
{ 
string script = "document.getElementById('Panel1').style.display='none';"; 
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "ClosePanel", script, true);
}