dimanche 6 septembre 2015

ASP.NET MVC Checkboxes won't mark as selected

basically I am trying to send multiple data from checkboxes in form to SQL server. When I submit the data, the checkboxes in the viewmodel are not marked as 'Checked' as my goal is. Relation is People, PeopleLanguages, Languages

in View i have:

@for (int i = 0; i < 3; i++)
                        {
                            <tr>
                                <td>
                                    @Html.DisplayFor(m => m.LanguagesList[i].LanguageName)
                                </td>
                                <td>
                                    @Html.HiddenFor(m => m.LanguagesList[i].Id)
                                    @Html.CheckBoxFor(m => m.LanguagesList[i].IsSelected)
                                </td>
                            </tr>
                        }

Model generated from ADO.NET:

public partial class Language
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Language()
        {
            PeopleLanguages = new HashSet<PeopleLanguage>();
        }

        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { get; set; }

        [StringLength(50)]
        public string LanguageName { get; set; }

        public bool IsSelected { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<PeopleLanguage> PeopleLanguages { get; set; }

        public static explicit operator Language(int v)
        {
            throw new NotImplementedException();
        }
    }
}

My ViewModel contains:

public class ViewModelVM
    {
       .. other data

        public List<Language> LanguagesList
        {
            get
            {
                return new List<Language>
                {
                    new Language { LanguageName = "English", Id = 1 },
                    new Language { LanguageName = "German", Id = 2 },
                    new Language { LanguageName = "Russian", Id = 3 }
                };

            }
        }


        public int LanguageId { get; set; }

        .. other data..

    }

IN controller I have the following logic:

var mylist = vm.LanguagesList.Where(l => l.IsSelected);
                var peopleLanguages = new HashSet<PeopleLanguage>();

                foreach (var item in mylist)
                {
 //obviously this is not correct
               peopleLanguages.Add(new PeopleLanguage() { LanguageId = vm.LanguaeId });
                }

Well, if I hardcode the 'Selected' parameter here:

public List<Language> LanguagesList
        {
            get
            {
                return new List<Language>
                {
                    new Language { LanguageName = "English", Id = 1, IsSelected=true },
                    new Language { LanguageName = "German", Id = 2, IsSelected=true },
                    new Language { LanguageName = "Russian", Id = 3, IsSelected=true }
                };

            }
        }

Then, i have proper result in SQL server. My question is how to make it 'isSelected = true', and binding the data, before sending it to server. 'vm' represents ViewModelVM vm = new ViewModelVM(); It is highly recommended, not changing ADO.NET Model because of migrations. I turned them off for completely different reasons. I'll be happy to see your suggestions.




Aucun commentaire:

Enregistrer un commentaire