2010-06-17 4 views
0

J'ai un contrôle utilisateur simple qui bascule entre la visibilité de quelques images en fonction de l'UserId. Lorsque la page est chargée pour la première fois, l'ID utilisateur est assigné correctement (je débogue). Cependant, il y a deux autres boutons sur la page pour filtrer le type d'utilisateurs, ils effectuent leurs fonctionnalités via Ajax (pas le toolkit, mais le javascript ajax normal)Impossible d'affecter des valeurs à une variable dans un contrôle utilisateur sur ajax postback ... ou quelque chose comme ça!

Lorsque l'un de ces boutons est cliqué, le contrôle utilisateur Je ne peux pas obtenir l'ID utilisateur, il apparaît toujours comme zéro. Oh, btw, le usercontrol est dans un DataRepeater, donc il se produit pour chacun des utilisateurs .. tout le temps .. ou c'est l'idée. J'ai plusieurs autres pages comme celle-ci, (aucune n'a d'ajax) et le contrôle de l'utilisateur n'a aucun problème.

Mon code de contrôle de l'utilisateur:

ucAuthorityBadges de classe partielle publique: BaseUserControl {

protected void Page_Load(object sender, EventArgs e) 
    { 
      if (UserId > 0 && UOBJ.GroupId > 0) 
      { 
       DataSet DS = new DataSet(); 
       DS = huDataAccessLayer.dbTools.GetUserAuthority(UserId); 

       if (!utils.isDataSetEmpty(DS)) 
       { 
        imgTeamBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isTeam"]); 
        imgDoctorBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isDoctor"]); 
        imgAdminBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isAdmin"]); 
        imgVolunteerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isVolunteer"]); 
        imgBloggerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isBlogger"]); 
       } 
      } 
     } 
} 

Et est quelque chose comme répéteur de données ceci:

<div class="profileContainer"> 
<asp:HyperLink Enabled='<%# Eval("isActive") %>' ID="profileName_link" runat="server" Text='<%# Eval("Username") %>' NavigateUrl='<%# "/Profile/" + Eval("Username") %>'></asp:HyperLink> 
<img id="friend_image" runat="server" src="/css/images/icons/friend.gif" alt="friend" title="Friend" visible='<%# Convert.ToBoolean(Eval("isFriend")) %>' style="vertical-align:middle" /> 
<ucAB:AuthorityBadges ID="ucAuthBadge" runat="server" UserId='<%# Convert.ToInt32(Eval("UserId")) %>' /> 
<%# Eval("UserId") %> 
<asp:Label ID="status_label1" Text=" · Friend Request Pending" style="font-size:small;" Visible='<%# Convert.ToBoolean(Eval("isFriendReqPending")) %>' runat="server" Font-Bold="false"></asp:Label> 
</div> 

Ici, immédiatement après la usercontrol ligne, j'imprime l'ID utilisateur juste pour voir si c'est valide (par <% # Eval ("UserId")%> et l'ID de l'utilisateur sont valables aussi. Je ne comprends pas pourquoi le contrôle de l'utilisateur ne peut pas le ramasser sur ajax postback?

Toute allusion à ce serait vraiment super,

Merci beaucoup!

Répondre

2

Je pense que le problème ici est que votre code d'exécution se trouve réellement dans l'événement Page_Load, qui se produit avant que le répéteur soit DataBound. Une solution à cela serait de placer votre code qui est actuellement dans Page_Load dans une autre méthode publique, puis sur l'événement ItemDataBound vous devez trouver votre contrôle et appeler manuellement la méthode publique avec les paramètres dont vous avez besoin. De cette façon, vous allez remplir tous les champs dont vous avez besoin une fois que le contrôle est déjà initialisé.

Espérons que ça aide.

+0

Merci! ça a aidé !! – iamserious