2009-11-20 5 views
1

J'ai le code ASPX suivant:côté serveur Asp.net Attribut conditionnel ou attribut non contrôlé?

<% foreach (ModelDefect modelDefect in GetCodes()) 
    {%> 
<tr> 
    <td><input disabled="disabled" name="<%= modelDefect.Code %>" value="<%= modelDefect.Code %>" type="checkbox" checked="<%=modelDefect.CompletedDate.HasValue? "checked":string.Empty %>" /></td> 
    <td><a href="javascript:submitForm('<%= modelDefect.DefectId %>');"><%= modelDefect.Code %></a></td> 
    <td><%= modelDefect.Description %></td><td><%= modelDefect.AddedDate %></td> 
</tr> 
<% } %> 

Je veux la case à cocher à vérifier s'il y a une date de fin, et sans contrôle, sinon. W3 ne semble pas dire comment le laisser non coché mais inclure l'attribut. Je ne vois pas un moyen d'inclure conditionnellement cet attribut sur l'élément. J'ai trouvé une page qui suggère que checked = "yes" ou checked = "no" devrait fonctionner mais ce n'est pas le cas. Je voudrais une solution indépendante du navigateur et basée sur les normes ou ... une manière propre d'ajouter de façon conditionnelle ce côté serveur de balise sur mon asp qui est amical d'Ajax? (Response.Write ne fonctionne pas dans Asp.net AJaX que je le comprends.)

Répondre

3

Ecrivez une méthode d'assistance qui peut être testé unitairement et réutilisé:

public static string GetCheckedAttribute(DateTime? value) 
{ 
    return value.HasValue ? "checked=\"checked\"" : string.Empty; 
} 

et appelez dans votre page:

<input disabled="disabled" 
     name="<%= modelDefect.Code %>" 
     value="<%= modelDefect.Code %>" 
     type="checkbox" 
     <%= GetCheckedAttribute(modelDefect.CompletedDate) %> 
/> 
+0

ah. Comme c'est simple, je pense que c'était assez évident. – Maslow

+0

Votre méthode d'assistance ne devrait-elle pas prendre un 'DateTime?' Je suppose que CompletedDate est un 'DateTime?' Pas un 'bool?' – Bob

+0

@Bob, bon point. J'ai mis à jour ma réponse. –

3

Prenez l'attribut et le mettre comme une partie de la sortie conditionnelle, cela devrait fonctionner pour vous

<input disabled="disabled" 
     name="<%= modelDefect.Code %>" 
     value="<%= modelDefect.Code %>" 
     type="checkbox" 
     <%=modelDefect.CompletedDate.HasValue? "checked=checked":string.Empty %>" 
    /> 
+0

une autre solution simple, je plaide être malade comme la raison pour laquelle je n'ai pas réussi à trouver l'un ou l'autre. De plus, mon VS2008 me confond avec le bloc entier '<% %>' qui apparaît en rouge comme s'il y avait un '' 'non-clos 'quelque part quand il n'y en a pas. – Maslow

Questions connexes