2016-06-14 20 views
0

Ich habe ein AjaxFileUpload-Steuerelement in einem Benutzersteuerelement, das dynamisch auf Postback geladen wird, das Problem hier ist, sobald die Datei hochgeladen wird IsPostBack ist falsch, aufgrund der die Benutzersteuerung nicht geladen ist, verursacht Das Ereignis OnUploadCompleteAll wird nicht ausgelöst.AjaxFileUpload Postback-Ereignis von einem usercontrol ASP.NET

Ich fand heraus, dass AjaxFileUpload Steuerelement hat eine eigene Postback-Eigenschaft AjaxFileUpload.IsInFileUploadPostBack, wie kann ich auf diese Eigenschaft von meinem Haupt WebForm1.aspx Seite zugreifen?

Wenn ein Ereignis von AjaxFileUpload ausgelöst wird, möchte ich IsInFileUploadPostBack auf Seite laden von WebForm1.aspx überprüfen und laden Sie dann die Benutzersteuerung.

Hier ist der Code.

Webform1.aspx

<form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:Button ID="Button1" runat="server" Text="Load Control" OnClick="Button1_Click" /> 
     <asp:PlaceHolder ID="Placeholder1" runat="server" /> 

    </form> 

Codebehind

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack) 
       loadcontrol(); 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 

     } 

     private void loadcontrol() 
     { 
      this.Placeholder1.Controls.Clear(); 
      var _controls = LoadControl("~/WebUserControl1.ascx"); 
      this.Placeholder1.Controls.Add(_controls); 
     } 

WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="AjaxFileUpload_Test.WebUserControl1" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 

<div id="div1"> 

     <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" UseAbsoluteHandlerPath="false" OnUploadCompleteAll="AjaxFileUpload1_UploadCompleteAll" OnUploadStart="AjaxFileUpload1_UploadStart" runat="server" /> 
</div> 
+0

Potential Duplikat Page_Init: http://stackoverflow.com/questions/14665667/ajaxfileupload-postback-false –

+0

Es gibt nur so viele Möglichkeiten, „es zu sagen, kann nicht als Arbeit beschrieben " Dieser Teil ist unmöglich " IsInFileUploadPostBack auf Seite laden von WebForm1.aspx und laden Sie dann die Benutzersteuerung. " Sie können eine Eigenschaft von etwas, das nicht geladen wurde, nicht überprüfen. –

+0

Verstanden ... sagen wir, ich möchte die Eigenschaft in loadcontrol() überprüfen, nachdem das Steuerelement geladen wurde, wie mache ich das? –

Antwort

0

Es funktioniert !!

Da ich die Kontrollen nur dann laden muss, werde ich auf AjaxFileUpload.IsInFileUploadPostBack Eigentum zugreifen können, entschied ich mich für einen unorthodoxen Ansatz.

unten Code hinzugefügt

//to load the controls if AsyncFileUpload causes a postback 
//the URL should contain the ID of the control in its context query string 
    if (Request.HttpMethod.Contains("POST") && Request.Url.AbsoluteUri.Contains("AjaxFileUpload1")) 
      loadcontrol(); 
0

Gibt es einen bestimmten Grund, warum Sie die Usercontrol von Code-Behind geladen werden? Ein Ajax-Steuerelement erstellt kein tatsächliches Postback, weshalb das immer falsch ist. Für was Sie scheinen wollen, sollten Sie einen NON-AJAX-Datei-Upload verwenden.

+0

Ich habe viele Optionen auf der Hauptseite, basierend auf diesen Optionen lade ich die jeweiligen Benutzersteuerelemente. Das AjaxFileUpload-Steuerelement verfügt über eine Eigenschaft, die es für den Post-Back festgelegt hat. Wie kann ich auf diese Property von meiner Hauptseite aus zugreifen? –

+0

Der Ajax-Steuerposten wird in einen versteckten Rahmen gestellt, so dass Sie nie den normalen IsPostBack-Teil auslösen können, was wiederum verhindert, dass Sie das Steuerelement beim Laden der Seite korrekt laden können, was Sie sehen. Aus diesem Grund können Sie nicht auf das Steuerelement oder IsInFileUploadPostBack zugreifen. Was Sie versuchen können, ist immer das Steuerelement auf der Seite zu laden, aber es so versteckt, dass Sie immer sicher sein können, dass die Kontrolle geladen ist, aber nur bei Bedarf mit einigen Client-Javascript anzuzeigen, dann sollten Sie in der Lage sein, die IsInFileUploadPostBack zu überprüfen Eigentum. –

+0

Auch ich denke, wenn Sie das Steuerelement dynamisch laden werden, müssen Sie es früher im Seitenlebenszyklus tun, damit es die Viewstate-Information korrekt erhält, ist Seitenladen zu spät (ich glaube, es war eine Weile). –