J'ai un <asp:CheckBoxList>
en utilisant RepeatLayout="Flow"
dans ma page J'affecte dynamiquement des valeurs à. Si la page est chargée la première fois (!IsPostBack
), la version rendue ressemble à ceci;Empêcher le nouveau rendu de CheckBoxList
<span children="Cat">
<input id="ctl00_Menu_Category_0" type="checkbox" name="ctl00$Menu$Category$0"/>
<label for="ctl00_Menu_Category_0">Cat</label>
</span>
<br/>
<span class="Cat">
<input id="ctl00_Menu_Category_1" type="checkbox" name="ctl00$Menu$Category$1"/>
<label for="ctl00_Menu_Category_1"> - SubCat1</label>
</span>
children
est un attribut que j'utilise un code jQuery, donc lorsque les contrôles utilisateur Cat
, tous les SubCat
s sont également vérifiés.
Le code jQuery recherche tous les <span>
s ayant la classe égale à l'attribut children
, donc j'ai besoin de maintenir cette structure que le jQuery fonctionne.
Mais, après que je recharger la page ou suivre un lien, quelle que soit, la liste semble tout à coup comme ceci:
<input id="ctl00_Menu_Category_0" type="checkbox" name="ctl00$Menu$Category$0"/>
<label for="ctl00_Menu_Category_0">Cat</label>
<br/>
<input id="ctl00_Menu_Category_1" type="checkbox" name="ctl00$Menu$Category$1"/>
<label for="ctl00_Menu_Category_1"> - SubCat1</label>
Comment est-ce possible? J'ai assigné les valeurs à la liste une seule fois, alors pourquoi est-il rendu à nouveau après un PostBack et comment puis-je l'empêcher de le faire?
Modifier
Voici le code qui crée la liste;
// Get all available categories that are not a child of another category
DataTable categoryParents = functions.SelectSql(Resources.Data.GetCategoryParents);
// Get the child categories
foreach (DataRow parent in categoryParents.Rows)
{
// Add the category
ListItem parentItem = new ListItem(parent["Name"].ToString(), parent["Name"].ToString());
parentItem.Attributes.Add("children", parent["Name"].ToString().Replace(' ', '_'));
Category.Items.Add(parentItem);
// For every parent category, get all its child categories
DataTable categoryChildren = functions.SelectSql(Resources.Data.GetCategoryChildrenByParent.Replace("##PARENTID##", parent["ID"].ToString()));
// Add the child categories after their parents
foreach (DataRow child in categoryChildren.Rows)
{
ListItem item = new ListItem(" - " + child["Name"].ToString(), parent["Name"].ToString() + "\\" + child["Name"].ToString());
item.Attributes.Add("class", parent["Name"].ToString().Replace(' ', '_'));
Category.Items.Add(item);
}
}
Category.DataBind();
jQuery lui-même ne fait rien avec le HTML, il ne détient que la fonctionnalité pour vérifier les catégories d'enfants lorsqu'un parent est vérifié;
$("#Category :checkbox").click(function(){
var checked = $(this).attr("checked");
var children = $(this).parent("span").attr("children");
$("#Category ." + children + " :checkbox").attr("checked", checked);
});
jQuery ne fait aucune manipulation, voir mon édition. –
bien, je crains que je n'ai pas une solution simple et génial, mais voir mon édition –
D'accord, une solution de contournement a semblé fonctionner; Je définis 'EnableViewState =" false "' et maintenant il rend correctement chaque fois ... mais supprime les boîtes sélectionnées après rechargement: -/ –