Posted 3 May 2021, 8:22 pm EST
Hi I’m facing a weird problem trying to check via javascript a multiselect component:
// ms is the multiselect object
function setClasseProdottoPostback(ms, s){
if ( ms == null || s == '' ){
return false;
}
var k = s.split('|');
if ( k.lentgh < 1 ){
return false;
}
var cv = ms.collectionView;
if ( cv == null) return false;
if ( cv.items.length < k.length) return false; // error
for(var i=0; i<k.length; i++) {
for (var j = 0; j < cv.items.length; j++){
if ( cv.items[j].Codice == k[i] ) {
cv.items[j].$checked = true;
break;
}
}
}
ms.invalidate();
return true;
}
/// the Html helper: ///
<div class="col-md-5" style="margin-top:7px">
@(Html.C1().MultiSelect()
.Id("msClasseProdotto")
.Placeholder("Selezionare le classi prodotto")
.HeaderFormat("{count} selezionati")
.Bind(Model.ClasseMerceologicaList).Width(320)
.DisplayMemberPath("Descrizione")
.SelectedValuePath("Codice")
.CheckedIndexes(arr_clp)
.IsEditable(false)
.IsRequired(false)
.OnClientSelectedIndexChanged("cb_ClasseProdIndexChanged")
.OnClientCheckedItemsChanged("cb_ClasseProdCheckedChanged")
//.ItemFormatter("cb_ClasseProdItemFormatter")
)
</div>
It seems that multiselect ignore javascript code setting property item.$checked=true of an item. My items recordset has not field for checkbox. As a workaround I used “CheckIndexes()” method and c# code to create an int array for it, but this works only for postback.
I remind that old component (2019) worked fine.
What I’m missing?