2013-05-22 51 views
2

这里的标记:按钮在UpdatePanel的触发事件,但该网页不更新

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <div class="well well-large"> 
      <form class="navbar-form pull-left"> 
       <asp:FileUpload ID="test" runat="server" CssClass="input-small" /> 
       <br /> 
       <asp:Button ID="btnUpload" runat="server" Text="Upload" CssClass="btn" OnClick="btnUpload_Click" /> 
      </form> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnUpload" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 

<asp:Panel runat="server" ID="panAlert" Visible="false"> 
    <div class="alert alert-success" id="divAlert" runat="server"> 
     <button id="Button1" runat="server" type="button" class="close" data-dismiss="alert">&times;</button> 
     You shouldn't see this message! 
    </div> 
    <asp:Panel runat="server" ID="panMarquee" Visible="true"> 
     <div id="Div1" runat="server" class="progress progress-success progress-striped"> 
      <div id="ProgressBar" runat="server" class="bar" style="width: 100%"></div> 
     </div> 
    </asp:Panel> 
</asp:Panel> 

当点击btnUpload按钮,服务器代码应该确定FileUpload控件有一个文件。如果确实如此,它会将Panel控件的可见性更改为true。它在UpdatePanel之外工作正常。

这里的服务器代码:

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     this.SetMessage(Message.Success); 
     try 
     { 
      if (this.test.HasFile) 
      { 
       string filename = Path.GetFileName(GetUB04Doc.FileName); 
       //test.SaveAs(Server.MapPath("~/") + filename); 
       this.SetMessage(Message.Success); 
      } 
     } 
     catch (Exception ex) 
     { 
      //TODO: Do something with th exception 
      this.SetMessage(Message.Fail); 
     } 
     finally 
     { 
      //this.GetUB04Doc.Dispose(); 
     } 
    } 
private enum Message { Success, Fail } 
    private void SetMessage(Message msg) 
    { 
     if (msg == Message.Success) 
     { 
      this.divAlert.InnerText = "Well done! The document appears to have uploaded successfully. Please wait..."; 
      this.divAlert.Attributes.Add("class", "alert alert-success"); 
     } 
     else 
     { 
      this.divAlert.InnerText = "Oh snap! Something broke. Please contact IT right away."; 
      this.divAlert.Attributes.Add("class", "alert alert-error"); 
     } 

     this.panAlert.Visible = true; 
    } 

我试图把面板中的ContentTemplate节为好,但结果是一样的。

任何想法,我在做什么错在这里?

+2

我讨厌告诉你,但'FileUpload'控件在'UpdatePanels'中无法正常工作!有解决方法,例如使用MS Ajax Toolkit中的'AsyncFileUpload'。 – Belogix

+0

为什么更新面板和为什么不Json和Jquery发布数据? – 2013-05-22 17:30:05

+0

@Belogix谢谢。我将切换到AJAX控件。 – ernest

回答

3

您应该在另一个UpdatePanel的异步回传中将您正在修改的区域包围起来,UpdateMode设置为Conditional

<asp:UpdatePanel ID="panAlertUpdatePanel" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:Panel runat="server" ID="panAlert" Visible="false"> 
     <!-- .... 

代码隐藏:

// ... 
this.panAlert.Visible = true; 
panAlertUpdatePanel.Update() 

侧面说明:由于@Belogix已经评论说,你应该使用在UpdatePanelAsyncFileUpload控制,因为常规FileUpload控制它,然后从代码隐藏手动更新其他不支持异步回发。

MSDN

控件不兼容与UpdatePanel控件:

  • ...
  • FileUploadHtmlInputFile控制时,它们被用来上传文件作为一个组成部分异步回发
  • ...

要使用一个FileUpload或HtmlInputFile控件一个UpdatePanel 控制里面,设置提交的文件是一个面板 PostBackTrigger控制的回传控制。 FileUpload和HtmlInputFile控件只能用于回发场景。

+0

完美!非常感谢。 – ernest

+0

你也应该在这里扔一些光http://stackoverflow.com/q/16697601/2333922 – 2013-05-22 17:23:59

0

你需要把PostBackTrigger而不是AsyncPostBackTrigger这样。 <asp:PostBackTrigger ControlID="btnUpload" />

+0

这没有奏效。但是,蒂姆的回答确实如此。谢谢 – ernest

相关问题