当前位置: 代码迷 >> ASP.NET >> 关于Asp.net的updatePanel和fileupload,以及panel控件有关问题.
  详细解决方案

关于Asp.net的updatePanel和fileupload,以及panel控件有关问题.

热度:8586   发布时间:2013-02-25 00:00:00.0
关于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);}
  相关解决方案