【问题标题】:How to send selected values to viewModel from multiselect (Kendo MultiSelect)如何从多选(Kendo MultiSelect)将选定的值发送到 viewModel
【发布时间】:2018-03-28 06:23:48
【问题描述】:

我在我的mvc5 项目中使用Kendo MultiSelect。所以我对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>

我有 2 个视图模型:

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; }
    }

在我的Kendo MultiSelect 中,以 JSON 格式从 Book 控制器获取所有公共房屋。接下来我选择了一些值:

那么,我怎样才能在BookViewModel 的public ICollection&lt;PublicHouseViewModel&gt; PublicHouses { get; set; } 属性中传递这个选定的值?

【问题讨论】:

  • 使用@Html.ListBoxFor(m =&gt; m.PubHouses, new SelectList(Model.PublicHouses, "PublicHouseId", "PublicHouseName"), "--Select Public Houses--") 创建您的列表框,然后脚本变成$("#PubHouses").kendoMultiSelect(); - 不需要不必要的ajax 调用。 (尽管您的视图模型应该包含 IEnumerable&lt;SelectListItem&gt; PubHouses 属性,而不是 ICollection&lt;PublicHouseViewModel&gt; PubHouses)
  • 我需要将我选择的值保存在多选中,例如 BookViewModel 中的 PublicHouseViewModel 列表
  • 我向您展示的代码将正确绑定到您的模型 - 即在 POST 方法中,PubHouses 将包含所选选项的值!而且您无法取回PublicHouseViewModel 的列表 - &lt;select multiple&gt; 回发一组简单值 - 所选选项的值,而不是复杂对象的集合。
  • 确保输入的名称与 VM BookViewModel 相同以便良好绑定,我看不到 html 和控制器,这是绑定问题,没有剑道或仅 VM

标签: javascript jquery asp.net-mvc kendo-asp.net-mvc multi-select


【解决方案1】:

你可以使用:

public int[] PublicHouses { get; set; }

代替:

 public  ICollection<PublicHouseViewModel> PublicHouses { get; set; }

或者您可以在BookViewModel 中创建一个仅用于发布的新字段。 当您从 kendoMultiSelect 发布值时,他仅发布 "dataValueField"。仅发布 id 后,您可以在 POST 操作中执行其余逻辑。

这取决于您如何实现POST 操作以及两个表之间的关系:是1...N,还是N....N。

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多