2010-12-14 22 views
2

Je vais commencer par dire que je ne suis pas un développeur ASC/C#, c'est pour un devoir. (J'espère que quelqu'un va comprendre ce que je veux: D, parce que je ne sais pas exactement les termes)Asp.net récupérer du contenu à partir d'un contrôle

Je Friends.aspx et Friends.aspx.cs

En Friends.aspx j'ai quelque chose comme
<%@ Reference Control="~/FriendBox.ascx" %>
<div class="controlcontainer clearfix friendlist_containeritems" id="divFriends" runat="server"> </div>

En Friends.aspx.cs je dois cela à remplir divFriends:


foreach (FBUser user in list){ 
     Control control = LoadControl("FriendBox.ascx"); 
     FriendBox myControl = (FriendBox)control; 
     myControl.user = user;     
     divFriends.Controls.Add(myControl);     
    } 

Dans ma page une une forme et divFriends est à l'intérieur de la forme. J'ai un bouton dans ce formulaire. Si j'appuie simplement sur le bouton, ma page est soumise et je peux récupérer les valeurs des cases cochées. (Chaque contrôle contient une case à cocher)

Everithing a bien fonctionné jusqu'à ce que j'ai essayé de soumettre la page via Ajax (JQuery). Mon problème est que même les cases à cocher sont sur la page (je peux les voir, les sélectionner), quand je fais un ajax je ne peux pas accéder aux valeurs des cases à cocher. C'est le code que je l'utilise pour récupérer les valeurs de cases à cocher:

 
foreach(Control ctrl in divFriends.Controls) {
var friendBox = ctrl as FriendBox; //i can get here
if (friendBox != null) { //i never get here - because friendBox is allways null } }

How can i make the content from divFriends accesible when i submit my form with Jquery? Thanks in advance.

Edit: here is the javascript i use


$(document).ready(function() { 
     $('.big').click(function() { 
      //.big is my button 
      $('.big').attr('disabled', true);

 var form_form = $(document).find('form'); 
     $.ajax({ 
      type: 'POST', 
      url: form_form.attr('action'), 
      data: form_form.serialize(), 
      dataType: 'json', 
      success: function (data) {      
       console.log('success'); 
      }, 
      complete: function (XMLHttpRequest, textStatus) { 
       $('.big').attr('disabled', false); 
      } 
     }); 
     return false; 
    }); 

});


Le javascript fonctionne parce que je peux soumettre des données, et je peux recevoir des données de retour (JSON), quand je regarde les données inscrits par cet auteur je n'ai pas les cases à cocher de divFriends.

+0

Pouvez-vous afficher le javascript qui envoie le formulaire? – Josh

+0

C'est un devoir assez compliqué. :/ – Greg

+2

Où dans votre code-behind est cette boucle foreach qui ajoute des contrôles? Quel événement, toute logique autour d'elle? En outre, y a-t-il une raison particulière pour laquelle vous ajoutez des contrôles dynamiquement comme cela plutôt que de manière déclarative (orthographe?) En utilisant un répéteur/un autre contrôle de base de données? – RichardW1001

Répondre

2

Le problème semble être le problème de gestion d'état asp.net. Vous ajoutez seulement FriendBox une fois (je présume, probablement avec un genre de thème sinon page.ispostback), et pas sur chaque page hit. Depuis FriendBox est ajouté dynamiquement il ne survit pas à une publication et donc il n'existe pas lorsque vous essayez de le lire.

Vous devez ajouter FriendBox chaque fois que la page se charge, sur Init avant le chargement de viewstate. L'ajout des contrôles pendant init va permettre à Viewstate de suivre les valeurs et corrigera probablement le problème.