2010-10-19 2 views
0

J'ai une application ASP.NET qui inclut un gridview. Cette grille contient 4 colonnes modèles de cases à cocher et 2 colonnes modèles de boutons de lien. Si je clique sur la première case à cocher, alors les deux boutons de lien devraient être activés, sinon ils devraient être en mode désactivé. Cette fonctionnalité fonctionne bien. Mais mon problème est, au moment du chargement du formulaire, il va vérifier si la première colonne est cochée ou non. Si la case n'est pas cochée, les boutons de liaison seront désactivés. Mais après la vérification de cette case à cocher, il sera activé, mais il n'y a pas de lien vers la redirection. Mon code est montré ci-dessous.Le bouton de lien a quelques problèmes

protected void DGDocuments_ItemDataBound(object sender, DataGridItemEventArgs e) 
    { 
     if (e.Item.ItemIndex == -1) return; 

     BindCheckBox(e.Item, "chkRead"); 
     BindCheckBox(e.Item, "chkCreate"); 
     BindCheckBox(e.Item, "chkUpdate"); 
     BindCheckBox(e.Item, "chkDelete"); 

     CheckBox chkID = (CheckBox)e.Item.FindControl("chkRead"); 
     if (!chkID.Checked) 
     { 
      LinkButton lnkPermission = (LinkButton)e.Item.FindControl("lnkFieldPermssion"); 
      LinkButton lnkSetRules = (LinkButton)e.Item.FindControl("lnkAddRules"); 

      lnkPermission.Enabled = false; 
      lnkSetRules.Enabled = false; 
     } 
    } 

En page Concepteur:

<asp:TemplateColumn HeaderText="Read" ItemStyle-HorizontalAlign="Center"> 
    <ItemTemplate> 
     <asp:CheckBox ID="chkRead" runat="server" Text='<%# Eval("Read") %>' onclick="javascript:EnablePermissoin(this,5,6);" /> 
    </ItemTemplate> 
</asp:TemplateColumn> 
<asp:TemplateColumn HeaderText="Rules" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true"> 
    <ItemTemplate> 
     <asp:LinkButton ID="lnkAddRules" Text="Add Rules" runat="server" CommandName="cmdSetRules" /> 
    </ItemTemplate> 
</asp:TemplateColumn> 
<asp:TemplateColumn HeaderText="Field Permission" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true"> 
    <ItemTemplate> 
     <asp:LinkButton ID="lnkFieldPermssion" Text="Set" runat="server" CommandName="cmdFieldPermission" /> 
    </ItemTemplate> 
</asp:TemplateColumn> 

Javascript est:

function EnablePermissoin(chkB, cellNumber1, cellNumber2) { 
     var IsChecked = chkB.checked; 
     if (IsChecked) { 

      var cell1 = chkB.parentElement.parentElement.cells[cellNumber1]; 
      for (i = 0; i < cell1.childNodes.length; i++) { 
       if (cell1.childNodes[i].tagName == "A") { 
        cell1.childNodes[i].disabled = false; 

       } 
      } 
      var cell2 = chkB.parentElement.parentElement.cells[cellNumber2]; 
      for (i = 0; i < cell2.childNodes.length; i++) { 
       if (cell2.childNodes[i].tagName == "A") { 
        cell2.childNodes[i].disabled = false; 
       } 

      } 

     } 
     else { 
      var cell1 = chkB.parentElement.parentElement.cells[cellNumber1]; 
      for (i = 0; i < cell1.childNodes.length; i++) { 
       if (cell1.childNodes[i].tagName == "A") { 

        cell1.childNodes[i].disabled = true; 
       } 

      } 
      var cell2 = chkB.parentElement.parentElement.cells[cellNumber2]; 
      for (i = 0; i < cell2.childNodes.length; i++) { 
       if (cell2.childNodes[i].tagName == "A") { 

        cell2.childNodes[i].disabled = true; 
       } 
      } 
     } 
    } 

C'est le code obtenu de voir la source du navigateur, sans désactiver le bouton de lien sur le formulaire de chargement:

<td align="center" style="font-weight:bold;"> 
    <a id="DGDocuments_ctl23_lnkAddRules" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkAddRules&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Add Rules</a> 
</td><td align="center" style="font-weight:bold;"> 
    <a id="DGDocuments_ctl23_lnkFieldPermssion" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkFieldPermssion&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Set</a> 
</td> 

Si je désactive le bouton de lien sur le chargement, ce sera le code obtenu à partir de la source de vue:

<td align="center" style="font-weight:bold;"> 
    <a id="DGDocuments_ctl23_lnkAddRules" disabled="disabled">Add Rules</a> 
</td><td align="center" style="font-weight:bold;"> 
    <a id="DGDocuments_ctl23_lnkFieldPermssion" disabled="disabled">Set</a> 
</td> 

S'il vous plaît aidez-moi à résoudre ce problème. Merci d'avance.

+1

Je ne vois pas où vous définissez URL de redirection pour les boutons de lien .. :) –

+0

Je définis le nom de la commande pour le bouton de lien. si je clique sur le lien, il va invoquer une méthode pour rediriger vers la page suivante. – MAC

Répondre

4

On dirait que lorsque vous désactivez le côté serveur LinkButton, il ne génère pas le gestionnaire d'événements onclick pour le une étiquette. Ainsi, une fois que vous avez activé LinkButton via JavaScript, il ne sait pas comment publier. Je suggère soit de rendre le LinkButton normalement, puis de le désactiver via JavaScript ou de définir AutoPostback sur True pour la case à cocher et d'activer le côté serveur.

1

Vous allez devoir reconsidérer votre solution. Les LinkButtons génèrent simplement une balise <A> dans le code HTML. Une balise < ne peut pas être "désactivée". Par conséquent, lorsque vous définissez un LinkButton sur Désactivé, ASP.NET supprime le HREF de la balise de sorte qu'un clic ne fasse rien. Je dois souligner que votre JavaScript pour désactiver la balise <A> ne fonctionne pas - cela rend la balise <A> désactivée, mais elle reste cliquable. Pour que cela fonctionne côté client, vous aurez besoin de votre fonction JavaScript pour ajouter et retirer le HREF de la balise <A>. Les autres options incluent tout faire côté serveur, de sorte qu'ASP.NET gère la suppression et l'ajout du HREF, ou passer à un autre contrôle, tel qu'un bouton asp: normal, qui peut être activé et désactivé.

Questions connexes