2017-06-02 3 views
0

Je veux créer un WebForm C# avec un contrôle ASP.NET FileUpload et quelques zones de texte et un bouton d'envoi. Idée: l'utilisateur sélectionne un fichier, saisit des données, soumet le formulaire vérifie les données et s'il est valide, il sauvegarde le fichier sur le serveur sinon un message d'erreur est affiché. Il y a tellement de messages à propos de UpdatePanel Triggers etc. mais pas de solution de travail.ASP.NET FileUpload avec des conditions préalables (vide après PostBack)

Voici mon code derrière:

protected void Page_Load(object sender, EventArgs e) { 
    // for FileUpload-Control outside UpdatePanel 
    Page.Form.Attributes.Add("enctype", "multipart/form-data"); 
} 

protected void Button1_Click(object sender, EventArgs e) { 
    bool valid = true; 
    string errorMessage = DateTime.Now.ToLongTimeString() + ": "; 

    if (this.TextBox1.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox1<br/>"; 
    } 
    if (this.TextBox2.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox2<br/>"; 
    } 
    if (this.TextBox3.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox3<br/>"; 
    } 
    if (!this.FileUpload3.HasFile) { 
     // is alway false! 
     errorMessage += "Missing FileUpload3<br/>"; 
    } 

    if (valid) { 
     // never fires, because .HasFile is always false 
     this.Label1.Text = "valid!"; 

     // do upload stuff 
     this.FileUpload3.SaveAs("foobar"); 
    } else { 
     this.Label1.Text = errorMessage; 
    } 
} 

Et voici mon exemple ASPX:

<form id="Upload" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

    <asp:FileUpload ID="FileUpload3" runat="server" /> 

    <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
      <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br /> 
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

Quelqu'un voit, pourquoi mon FileUpload est toujours vide, bien qu'il soit en dehors du UpdatePanel et je n'ai la ligne requise dans l'événement Page_Load()? Si, pourriez-vous ajuster le code?

Merci SiS

+0

Le contrôle FileUpload exige une publication complète, alors assurez-vous que 'Button1' déclenche un. – VDWWD

+0

J'ai ajouté un dans le UpdatePanel mais cela ne résout pas mon problème: Si je sélectionne un fichier mais que je manque TextBox3, le fichier FileUpload est vide après l'actualisation de la page. Je veux que le FileUpload garde ses données mais affiche un texte d'erreur. – StehtimSchilf

+0

Ce n'est pas comme ça que fonctionne FIleUpload. Vous devrez stocker le fichier dans un dossier temporaire sur le serveur si TextBox3 est vide. – VDWWD

Répondre

0
<form id="Upload" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

<asp:FileUpload ID="FileUpload3" runat="server" /> 

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
    <ContentTemplate> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br /> 
     <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="Button1" /> 
    </Triggers> 

+0

1er, votre devrait être dans le UpdatePanel-Tag, 2ème: si je choisis un fichier, mais ratez textbox3 Il efface toujours le contrôle FileUpload. – StehtimSchilf

+0

essayer ce code .... après vérification et l'utilisation interne dans contrôle – mitul