2009-03-03 2 views
1

Voici un exemple simplifié de ce que j'essaie d'obtenir;Définition d'une case à cocher en utilisant l'expression <% # isChecked%>

<asp:CheckBox runat="server" Checked="<%# this.isChecked %>" id="myCheckBox" /> 

Puis dans mon code derrière;

public partial class _Default : System.Web.UI.Page 
{ 
    bool _isChecked = true; 

    public string isChecked 
    { 
     get 
     { 
      return _isChecked.ToString(); 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

Je suis conscient du fait que, dans ce cas, je peux simplement utiliser myCheckBox.Checked = true, mais je suis juste en utilisant cet exemple à des fins d'illustration. Le vrai contrôle est un contrôle personnalisé, mais je n'ai pas de chance pour que cette approche fonctionne. Il semble juste ignorer la valeur que je fournis.

Est-il correct d'utiliser <% # this.isChecked%> de cette manière?

EDIT:

Désolé, j'ai écrit cela à la hâte et se rendre compte que ce n'est pas vraiment clair que je voulais « case » pour être juste un exemple. J'essaye juste d'obtenir un bool de côté de serveur dans n'importe quel attribut particulier du contrôle d'ASP, pas nécessairement l'attribut "vérifié" du contrôle de case à cocher.

EDIT 2: mis à jour mon exemple d'utiliser la propriété de chaîne plutôt que le champ booléen, mais il est assujetti l'erreur suivante dans mon fichier ASPX maintenant;

Impossible de convertir le type 'string' à 'bool'

Répondre

3

Si vous fournissez

checked="anything" 

il sera vérifié (en HTML). Vous devez omettre l'attribut checked pour qu'il ne soit pas vérifié, cela ne fonctionnera donc pas.


Après la modification à la question, voici ma réponse mise à jour:

Je ne voudrais pas essayer de définir l'attribut dans la page ASPX, plutôt j'utiliser l'ID et le faire dans le code.

par ex.

<asp:Control ID="uxMyControl" runat="server" attributes="other"... /> 
code

derrière:

private Boolean mypropery = false; 

Page_Load(object sender, EventArgs e) 
{ 
    this.myproperty = true; 
    uxMyControl.attributes = myproperty; 
} 
+0

C'est ce que j'avais fait initialement, mais parce que le contrôle est rendu avant que Page_Load soit exécuté pour la page parente, l'attribut est défini trop tard et le contrôle est rendu selon la valeur par défaut de l'attribut plutôt que un ensemble dans Page_Load. –

+0

Le contrôle ne doit pas être entièrement rendu à ce point, cependant avez-vous essayé d'éditer le chargement du contrôle? Ou en utilisant Page_PreInit? – cjk

+0

'Checked' est une propriété booléenne sur un serveur de contrôle dans ce cas, pas un attribut html. Le rendu est géré par le contrôle serveur. –

2

Non, parce que vous retournez un bool plutôt que la chaîne (problème de transtypage), vous avez besoin d'une propriété plutôt que d'un terrain pour travailler avec l'expression de liaison de données, et certains navigateurs ne rendront pas correctement votre case à cocher avec les mots "true/false". Au lieu de cela, ils s'attendent à voir checked="checked" pour cocher la case ou rien pour la décocher.

En fonction de votre modification, je suppose que vous avez du code ailleurs qui essaie de définir le booléen isChecked. Le code échoue maintenant que le nom isChecked pointe vers une propriété de chaîne à la place. Mettez-le à jour pour définir _isChecked.

+0

J'ai changé d'un champ booléen à une propriété de chaîne, mais maintenant je reçois "Impossible de convertir le type 'chaîne' en 'bool'" dans mon fichier .aspx. Une idée de pourquoi il n'accepte pas la chaîne? –

+0

Plusieurs idées, mais la façon la plus simple de savoir laquelle est la bonne est si vous éditez votre question pour montrer le nouveau code. –

+0

Question originale mise à jour avec le code révisé –

Questions connexes