将值加载到Kendo MVC Multiselect中

本文关键字:MVC Multiselect Kendo 加载 | 更新日期: 2023-09-27 18:08:56

我试图预加载我的多选值。我似乎找不到使用Ajax作为数据源的示例。下面是我的视图代码:

@(Html.Kendo().MultiSelectFor(model => model.CompanyIds)
    .Name("CompanyIds")
    .AutoClose(false)
    .AutoBind(false)
    .Placeholder("Select companies...")
    .DataTextField("CompanyName")
    .DataValueField("CompanyId")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("GetAvailableCompanies", "Admin");
        }).ServerFiltering(true);
    })
    .HtmlAttributes(new { @class = "form-control" })
)

这里是我的控制器代码:

    public ActionResult Portals()
    {
        var portals = new Portals();
        portals.GetBySqlStatement("SELECT * FROM Portal WHERE IsDeleted = 0");
        var adminPortals = portals.Select(portal => new Infrastructure.ViewModels.AdminPortal
        {
            PortalName = portal.PortalName,
            PortalId = portal.PortalId,
            CompanyIds = new List<int> { 1 }
        }).ToList();
        return View(adminPortals);
    }

这是我的GetAvailableCompanies方法:

public virtual JsonResult GetAvailableCompanies([DataSourceRequest] DataSourceRequest request)
{
    var companies = new Companys();
    companies.GetBySqlStatement("SELECT * FROM Company WHERE IsDeleted=0 ORDER BY CompanyName");
    return Json(companies, JsonRequestBehavior.AllowGet);
}

我尝试将.Value(new List<int> {1})添加到多选结束,但它不选择它。我认为问题在于,因为是Ajax,这个值在多选中"还不存在"。有谁知道正确的处理方法吗?我试图寻找在数据绑定后执行的多选事件,也没有运气。

编辑

我的视图使用这个模型:

@model AdminPortal

,下面是类定义:

public class AdminPortal
{
    public int PortalId { get; set; }
    [Display(Name = "Portal Name")]
    [Required(ErrorMessage = "Portal Name is required")]
    public string PortalName { get; set; }
    public List<int> CompanyIds { get; set; }
}

将值加载到Kendo MVC Multiselect中

变化

.AutoBind(false)

.AutoBind(true)

旁注:.Name("CompanyIds")选项是不需要的,因为你的使用和表达式(.MultiSelectFor(m => m.CompanyIds)),无论如何都会添加name="CompanyIds"属性。