2010-05-11 5 views
0

J'ai une page de base à laquelle j'ajoute un contrôle Uploader basé sur Bulk Uploader à c-sharpcorner.com et le contrôle se trouve dans une div fané jQuery basé sur yesdegisnComment puis-je forcer un contrôle utilisateur jQuery masqué à rester après les événements de clic?

Uploader en vrac a deux événements côté serveur gestionnaires pour deux boutons - Ajouter et supprimer. Après avoir cliqué sur ces boutons, le fondu disparaît et vous revenez à la page de base - si l'utilisateur doit ajouter plus de fichiers, ce n'est pas souhaitable. L'ArrayList des fichiers ajoutés à un ListBox est maintenu, mais je dois cliquer sur le lien "fade-in" (LinkButton id = "lnkDocumentUpload") pour afficher à nouveau cette fenêtre.

J'ai également besoin du contrôle POST à ​​UploadPost.aspx, et cela ne fonctionne pas non plus. Cliquer sur le bouton de téléchargement (<asp:Button ID="btnUpload" runat="server" />) a le même comportement que décrit ci-dessus - le fondu disparaît, les données sont conservées et aucun POST. J'ai entouré le contrôle avec

<form id="frmUpload" action="~/UploadPost.aspx"> 
... 
    <asp:Button ID="btnUpload" runat="server" Text="Upload"/> 
</form> 

A LinkButton active le fondu dans jQuery via

$("#lnkDocumentUpload").click(function() { 
    centerPopup(); 
    loadPopup(); 
}); 

balisage MyUploader:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyUploader.ascx.cs" Inherits="Controls.MyUploader" %> 
<form id="frmUpload" action="~/UploadPost.aspx"> 
<table> 
    <tr> 
     <td style="width: 163px"> 
      <span style="font-size: 10pt; font-family: Verdana"><strong> 
      Select file to upload:</strong></span></td> 
     <td style="width: 324px"> 
      <asp:FileUpload ID="fUpload" runat="server" />&nbsp;<asp:Button ID="btnAdd" runat="server" Text="Add" 
       OnClick="btnAdd_Click" /></td> 
    </tr> 
    <tr> 
     <td style="width: 163px"> 
     </td> 
     <td style="width: 324px"> 
      <asp:ListBox ID="lstFiles" runat="server" Width="324px"></asp:ListBox> 
      </td> 
    </tr> 
    <tr> 
     <td style="width: 163px"> 
     </td> 
     <td style="width: 324px"> 
      <asp:Button ID="btnRemove" runat="server" Text="Remove" OnClick="btnRemove_Click" /> 
      &nbsp;<asp:Button ID="btnUpload" runat="server" Text="Upload"/></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <asp:Label ID="lblMessage" runat="server" Font-Names="Verdana" Font-Size="Small" 
       ForeColor="Red"></asp:Label></td> 
    </tr> 
</table> 

MyUploader codebehind:

public partial class MyUploader : System.Web.UI.UserControl 
{ 

    protected static ArrayList arrFiles = new ArrayList(); // has to be static since Adding and then reusing 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (Page.IsPostBack) 
      { 
       arrFiles.Add(fUpload); 
       lstFiles.Items.Add(fUpload.PostedFile.FileName); 
      } 
     } 
     catch (Exception ex) 
     { 
      lblMessage.Text = "An error has occured while adding file" + ex.Message; 
     } 
    } 

    protected void btnRemove_Click(object sender, EventArgs e) 
    { 
     if (lstFiles.Items.Count != 0) 
     { 
      arrFiles.Remove(fUpload); 
      lstFiles.Items.Remove(lstFiles.SelectedItem.Text); 
     } 
    } 
} 

Répondre

0

Je suppose que votre contrôle ASP.NET Bulk Uploader fonctionne en effectuant une publication sur le serveur, ce qui actualise la page. Lorsque la page est rechargée, la fenêtre contextuelle est dans son état de fondu par défaut.

Il peut s'agir d'une propriété du programme de transfert en bloc nommée "AutoSubmit" que vous pouvez définir sur False, puis soumettre ultérieurement tous les choix de fichiers de l'utilisateur en bloc. Ou, vous pouvez faire en sorte que le gestionnaire d'événements côté serveur du téléchargeur mette des données dans la page HTML que le client JS peut lire, puis le client JS peut comprendre que si la page a été rechargée en raison d'un téléchargement, La boîte de dialogue est de retour.

+0

Je suppose que la publication est effectuée automatiquement par les gestionnaires OnClick. Le contrôle n'est pas très complexe sinon (voir edit) donc pas de chance sur l'attribut AutoSubmit. Comment le client JS peut-il "déterminer si la page a été rechargée à cause du téléchargement"? –

+0

Un moyen (assez hacky) est d'avoir un contrôle 'Hidden' appelé' hdnKeepShowingDialog' dont la valeur par défaut 'Value' est' '" '', et de faire les gestionnaires 'btnAdd_Click' et' btnRemove_Click' 'hdnKeepShowingDialog.value =" oui " '. Puis sur le client ont quelque chose comme '$ (document) .prêt() (if ($ (" # hdnKeepShowingDialog "). Val()) {centerPopup(); loadPopup();}})' –

+0

les contrôles cachés sort de fait ce travail –

Questions connexes