2013-01-05 7 views
0

Je suis un peu nouveau à C# et j'ai une question.Comment cacher le bouton de lien basé sur un résultat retourné par une classe?

J'ai une classe comme ci-dessous qui renvoient tout simplement faux (ce qui est juste pour tester)

public class SetAuthority 
{ 
    public SetAuthority() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    public static Boolean AuthorizedToAddEdit() 
    { 
     return false; 
    } 
} 

J'ai un DetailsView avec deux boutons de lien pour modifier et ajouter Nouveau record. Je souhaite masquer les boutons de lien en fonction de la valeur renvoyée par la méthode de classe ci-dessus. Au-dessus du fichier de travail et des boutons Modifier et Nouveau lien sont cachés lorsque j'exécute le programme.

Mais la question est, j'ai un bouton de lien séparé en dehors de la DetailsView. C'est juste un lien pour naviguer vers une autre page. Je veux cacher cela de la même manière en utilisant la même logique. J'ai le code ci-dessous dans mon formulaire Web. Mais le bouton de lien est toujours visible et semble ne pas appeler la classe et ne pas récupérer la valeur. Il semble que la classe ne renvoie aucune valeur et quelqu'un peut-il m'aider à identifier ce qui est différent entre avoir cela et travailler dans DetailsView et ne pas travailler pour un simple bouton de lien.

Remarque: ayez une solution de contournement où je peux appeler la même méthode dans l'événement de chargement de page qui fonctionne correctement sans aucun problème. Le code est ci-dessous

protected void Page_Load(object sender, EventArgs e) 
    { 
     Boolean myAllowAdd; 
     myAllowAdd = SetAuthority.AuthorizedToAddEdit(); 

     if (myAllowAdd == false) 
     { 
      LinkButton1.Visible = false; 
     } 

    } 

Répondre

2

La raison en est que cela est pour les expressions de liaison de données seulement: <%# Depuis le DetailsView est lié aux données, il y travaille.

Si vous DataBind la page, il a également travaillé pour la LinkButton en dehors de la DetailsView:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.DataBind(); 
} 

inline asp.net tags... sorting them all out (<%$, <%=, <%, <%#, etc.)

Side note: être prudent avec static dans ASP.NET. La méthode statique ne fait pas encore mal. Mais si vous utilisiez également des champs statiques, vous entreriez dans un champ de mines car il serait partagé entre toutes les demandes. Votre code-behind actuel est la meilleure approche de toute façon.

Questions connexes