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