2010-07-17 8 views
0

J'essaie d'ajouter un contrôle à la page ASP.NET. Les contrôles sont ajoutés avec succès mais ne peuvent pas accéder à partir du code derrière. Dans l'exemple ci-dessous, lorsque vous cliquez sur Button1, il n'y a aucun élément dans "uploads" (tapez HttpFileCollection).Ajout de contrôle à ASP.NET avec jQuery

Voici mon mark-up:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="add-remove-control.aspx.vb" 
    Inherits="APIU.Web.add_remove_control" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script src="_Assets/scripts/jquery.js" type="text/javascript"></script> 

    <script type="text/javascript"> 
     $(function() { 

      var i = 1; 
      //allow only 3 elements 

      $('#add').click(function() { 
       if (i < 4) { 
        var add_input = '<input type="file" id="' + 'dynamic:' + i + '" name="' + 'dynamic:' + i + '" />' 
        var add_link = '<a href="#" class="remove">Remove</a>' 
        $('body').append('<p>' + add_input + add_link + '</p>'); 
        i++; 
       } 
      }); 

      $('.remove').live('click', function() { 
       $(this).parent('p').remove(); 
       i--; 
      }); 


     }); 
    </script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <a href="#" id="add">Add</a> 

     <asp:Button ID="Button1" runat="server" Text="Button" /> 
     <br /> 
     <p> 
      &nbsp;</p> 
    </div> 
    </form> 
</body> 
</html> 

code derrière:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
     Dim uploads As HttpFileCollection 
     uploads = HttpContext.Current.Request.Files 

     Dim sfile As String 


     For i As Integer = 0 To (uploads.Count - 1) 

      If (uploads(i).ContentLength > 0) Then 
       Dim c As String = System.IO.Path.GetFileName(uploads(i).FileName) 

       Try 
        uploads(i).SaveAs("C:\UploadedUserFiles\" + c) 

        sfile += uploads(i).FileName & "<br/>" 

       Catch Exp As Exception 

       End Try 

      End If 

     Next i 


    End Sub 

Pourquoi il n'y a aucun élément dans "" (upload) de type HttpFileCollection?

Répondre

0

La raison pour laquelle il ne se présente pas côté serveur est ici:

$('body').append('<p>' + add_input + add_link + '</p>'); 

Ce à l'élément ajoute <body>, ce qui est le plus important en dehors la <form> ... donc les entrées que vous êtes L'utilisation n'est pas incluse dans le POST. Append les éléments à la <form> au lieu, comme ceci:

$('form').append('<p>' + add_input + add_link + '</p>'); 

Ce sont les mêmes éléments d'entrée de la raison à l'intérieur un appel .dialog() ne sont pas soumis à ASP.Net, encore une fois il est déplacé juste avant </body> et à l'extérieur le </form> ... vous avez besoin d'un .dialog().parent().appendTo('form') pour la même raison là.

+0

J'ai ajouté un div comme ce

et j'ajouter les contrôles à elle comme ceci $ ('# upload-contorl') append ('

'+ add_input + add_link +'

'). Je peux ajouter les contrôles à la div mais les contrôles n'apparaîtront pas sur le diviseur. Si vous essayez d'ajouter l'attribut runat = "server" dans jQuery, le marquage ne sera pas rendu et l'erreur de lancer. – Narazana

+0

@Morron - Pas besoin de 'runat =" server "' c'est une affaire différente. Votre formulaire a probablement le mauvais encodage, ajoutez ceci à votre balise '

':' enctype = "multipart/form-data" ', comme ceci:' ' –

Questions connexes