Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值加载到剑道MVC Multiselect中_C#_Asp.net Mvc_Kendo Ui - Fatal编程技术网

C# 将值加载到剑道MVC Multiselect中

C# 将值加载到剑道MVC Multiselect中,c#,asp.net-mvc,kendo-ui,C#,Asp.net Mvc,Kendo Ui,我正在尝试用值预加载multiselect。我似乎找不到一个使用Ajax作为数据源的例子。以下是我的查看代码: @(Html.Kendo().MultiSelectFor(model => model.CompanyIds) .Name("CompanyIds") .AutoClose(false) .AutoBind(false) .Placeholder("Select companies...") .DataTextField("Company

我正在尝试用值预加载multiselect。我似乎找不到一个使用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);
    }
我尝试将
.Value(新列表{1})
添加到multiselect的末尾,但它没有选择它。我认为问题在于,因为它是Ajax,所以multiselect中的值“还不存在”。有人知道正确的处理方法吗?我试图在multiselect上寻找一个在数据绑定后执行的事件,但也没有成功

编辑

我的视图使用此模型:

@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; }
}
公共类AdminPortal { public int PortalId{get;set;} [显示(Name=“门户名称”)] [必需(ErrorMessage=“需要门户名称”)] 公共字符串PortalName{get;set;} 公共列表公司ID{get;set;} } 更改

.AutoBind(false)


旁注:
.Name(“CompanyIds”)
选项不是必需的,因为您的使用和表达式(
.MultiSelectFor(m=>m.CompanyIds)
)将添加
Name=“CompanyIds”
属性。

您的
MultiSelectFor()
具有
read.Action(“GetAvailableCompanies”,“Admin”)
即调用
AdminController
GetAvailableCompanies()
方法,您没有显示该方法。@StephenMuecke-我认为这与问题无关。但是我编辑了我的问题并添加了代码。我建议除非
公司
只包含两个属性(
CompanyId
CompanyName
)返回一个仅包含这两个属性的匿名对象集合,以避免通过网络发送不必要的数据。但这里有点奇怪-
Portals()
方法是否返回了您所引用的视图它返回一个集合,因此您的模型是
@model List
,这意味着
MultiSelectFor(m=>m.CompanyIds)
将无法工作。是您显示的自定义
编辑器模板的视图吗?@StephenMuecke-抱歉,我没有显示。看看我的编辑。我提供了类和
@model
定义。而且,你是对的。我将创建一个只包含
CompanyId
CompanyName
的类。现在,我只是用这个来测试。
.AutoBind(false)
.AutoBind(true)