标签控件不会从代码隐藏更新其文本值

时间:2015-02-16 11:21:18

标签: c# asp.net .net webforms

在下面的代码中,您可以在UpdatePanel中看到AjaxFileUpload控件和Label。预期的行为是更改lb_Info.Text值以显示信息,以防在上载过程中出现错误。

.aspx文件

<asp:Panel id="IP_Modal" runat="server" class="modal hide fade">
  <div class="form-inline">

  <asp:AjaxFileUpload ID="fup_Main" runat="server" 
     OnUploadComplete="UploadButton_Click"
     OnClientUploadComplete="MyNamespace.UploadComplete"
     OnClientUploadError="MyNamespace.UploadComplete"
     MaximumNumberOfFiles="1" />

  <asp:UpdatePanel ID="IP_UpdatePanel" UpdateMode="Conditional" runat="server">
     <ContentTemplate>
       <asp:Label ID="lb_Info" runat="server" Text="Dummy Text"/>
     </ContentTemplate>
     <Triggers>
       <asp:AsyncPostBackTrigger ControlID="fup_Main" EventName="UploadComplete"/>
     </Triggers>
  </asp:UpdatePanel>

  //Some hidden <asp:LinkButtons /> are here
  </div>
</asp:Panel>

在这里,您可以看到触发事件OnUploadComplete时执行的C#函数。 .cs文件

protected void UploadButton_Click(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{            
   try
   {            
     string filename = Path.GetFileName(e.FileName);
     if (!Directory.Exists(Server.MapPath("some_dir_path")))
        Directory.CreateDirectory(Server.MapPath("some_dir_path"));

     fup_Main.SaveAs(Server.MapPath("some_dir_path" + filename);

     /* Some validations here */

     lb_Info.Text = "Text from code-behind";
   }
   catch (Exception ex)
   {
      lb_Info.Text = Server.HtmlEncode(ex.Message);
   }
}

当我运行此代码时,我可以使用AjaxFileUpload控件完美地选择并上传文件,当上传完成后,它就会完成&#34; OnUploadComplete&#34;事件火灾和&#34; UploadButton_Click&#34;函数已执行,但页面未使用新标签文本进行更新。

我认为错误可能出现在Triggers部分的EventName属性中,但是如果我使用EventName =&#34; OnUploadComplete&#34; (这是AjaxFileUpload控件中的属性名称)页面甚至不会使用消息&#34呈现;无法找到名为&#39; OnUploadComplete&#39;的事件。关联控制&#39; fup_Main&#39;对于UpdatePanel&#34;

中的触发器

知道我在这里缺少什么吗? 提前感谢您的答案:)

2 个答案:

答案 0 :(得分:0)

在UploadButton_Click方法的末尾添加此行(在try catch之后可以在finally块中):

IP_UpdatePanel.Update();

答案 1 :(得分:0)

这对我有用:请适用于您的代码:经过代码测试

  <script type ="text/javascript">
    function AjaxFileUpload1_UploadComplete() {
        console.log('<%#myThrobber.ClientID%>');
        document.getElementById('myThrobber').innerHTML = "File Uploaded    Successfully";}
   </script>



   ![enter image description here][1]<div>

    <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server"
     OnClientUploadComplete="AjaxFileUpload1_UploadComplete"   ThrobberID="myThrobber" 
        MaximumNumberOfFiles="10" Width="337px" />
        <asp:Label runat="server" ID="myThrobber"  ></asp:Label>
</div>


Code Behind : 

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        string filePath = @"D:\Manish\FirstProject\sampleproject\sampleproject\upload\" + e.FileName;


        AjaxFileUpload1.SaveAs(filePath);


    }

我不知道为什么它不能从服务器端工作:(