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" /> <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" />
<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);
}
}
}
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"? –
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();}})' –
les contrôles cachés sort de fait ce travail –