I'm using Kendo MultiSelect
in my mvc5
project. So I have a View with multiselect
:
@model Library.ViewModels.Models.BookViewModel
@{
ViewBag.Title = "Edit";
}
<script>
$(document).ready(function () {
$("#multiselect").kendoMultiSelect({
placeholder: "--Select Public Houses--",
dataTextField: "PublicHouseName",
dataValueField: "PublicHouseId",
autoBind: true,
dataSource: {
transport: {
read: {
dataType: "json",
url: "/book/getallpublichouses"
}
}
}
});
});
</script>
And I have 2 viewModels:
public class BookViewModel
{
public int BookId { get; set; }
public string Name { get; set; }
public string AuthorName { get; set; }
public int YearOfPublishing { get; set; }
public ICollection<PublicHouseViewModel> PublicHouses { get; set; }
}
public class PublicHouseViewModel
{
public int PublicHouseId { get; set; }
public string PublicHouseName { get; set; }
public string Country { get; set; }
public ICollection<BookViewModel> Books { get; set; }
}
In my Kendo MultiSelect
a get all Public Houses from Book controller in JSON format. Next I selected some values:
So, how can I pass this selected values in public ICollection<PublicHouseViewModel> PublicHouses { get; set; }
property in BookViewModel
?
@Html.ListBoxFor(m => m.PubHouses, new SelectList(Model.PublicHouses, "PublicHouseId", "PublicHouseName"), "--Select Public Houses--")
and then the script becomes just$("#PubHouses").kendoMultiSelect();
- no unnecessary ajax call is required. (although your view model should contain aIEnumerable<SelectListItem> PubHouses
property, notICollection<PublicHouseViewModel> PubHouses
) – user3559349PubHouses
will contain the values of the selected options! And you cannot get back a list ofPublicHouseViewModel
- a<select multiple>
posts back an array of simple values - the values of the selected options, not a collection of complex objects. – user3559349