C# 使用MVC模型填充和验证剑道多选?

C# 使用MVC模型填充和验证剑道多选?,c#,asp.net-mvc-5,kendo-asp.net-mvc,C#,Asp.net Mvc 5,Kendo Asp.net Mvc,我试图用MVC5将我的剑道多重选择绑定到模型中的一个属性,但是我得到的只是一个未定义元素的列表。该列表在控制器级别是正确的,并且查看源代码,该列表在那里是正确的,但是我无法可视化该列表 同样令人费解的是,列表中有更多未定义的元素,而模型中的实际列表中有更多的项 有人能解释一下发生了什么,或者告诉我如何调试和修复我遇到的问题吗 型号: [Required] public SelectList hierarchy { get; set; } public virtual IEnumerable&l

我试图用MVC5将我的剑道多重选择绑定到模型中的一个属性,但是我得到的只是一个未定义元素的列表。该列表在控制器级别是正确的,并且查看源代码,该列表在那里是正确的,但是我无法可视化该列表

同样令人费解的是,列表中有更多未定义的元素,而模型中的实际列表中有更多的项

有人能解释一下发生了什么,或者告诉我如何调试和修复我遇到的问题吗

型号:

[Required]
public SelectList hierarchy { get; set; }

public virtual IEnumerable<SelectListItem> Hierarchy
{
    get
    {
        var hierarchies = new List<Company>();
        hierarchies = RoleCompanyHelper.GetHierachies();
        var hierarchiesList = new List<SelectListItem>();
        foreach (var hierarchy in hierarchies)
        {
            hierarchiesList.Add(new SelectListItem
            {
                Value = hierarchy.CompanyID.ToString(),
                Text = hierarchy.CompanyName
            });
        }
        return new SelectList(hierarchiesList, "Value", "Text");
    }
}
public ActionResult Index()
{
    var vm = new AXCurrentRolesViewModel();
    return View(vm);
}
@model TelerikMvcApp1.Models.AXCurrentRolesViewModel

@(Html.Kendo().MultiSelect()
    .Name("addRoleCompany_hierarchy")
    .BindTo(new SelectList("Value", "Text"))
    .Value(Model.hierarchy)
    .DataTextField("HierarchyName")
    .DataValueField("HierarchyID")
    .Placeholder("Select Hierarchy...")
    .Filter(FilterType.StartsWith)
    .AutoBind(false)
)
查看:

[Required]
public SelectList hierarchy { get; set; }

public virtual IEnumerable<SelectListItem> Hierarchy
{
    get
    {
        var hierarchies = new List<Company>();
        hierarchies = RoleCompanyHelper.GetHierachies();
        var hierarchiesList = new List<SelectListItem>();
        foreach (var hierarchy in hierarchies)
        {
            hierarchiesList.Add(new SelectListItem
            {
                Value = hierarchy.CompanyID.ToString(),
                Text = hierarchy.CompanyName
            });
        }
        return new SelectList(hierarchiesList, "Value", "Text");
    }
}
public ActionResult Index()
{
    var vm = new AXCurrentRolesViewModel();
    return View(vm);
}
@model TelerikMvcApp1.Models.AXCurrentRolesViewModel

@(Html.Kendo().MultiSelect()
    .Name("addRoleCompany_hierarchy")
    .BindTo(new SelectList("Value", "Text"))
    .Value(Model.hierarchy)
    .DataTextField("HierarchyName")
    .DataValueField("HierarchyID")
    .Placeholder("Select Hierarchy...")
    .Filter(FilterType.StartsWith)
    .AutoBind(false)
)
另请注意,为什么使用模型的标准验证总是返回true

感谢您对这些问题的帮助和建议

编辑 源代码

<select id="addRoleCompany_hierarchy" multiple="multiple" name="addRoleCompany_hierarchy"></select>
    <script>
        jQuery(function(){jQuery("#addRoleCompany_hierarchy").kendoMultiSelect({"dataSource":[{"Text":"All Companies Inc IFRS \u0026 Consol","Value":"55"},
        {"Text":"All Posting Companies (exc POC \u0026 Investments)","Value":"56"},
        {"Text":"BUUK Group Structure","Value":"57"},
        {"Text":"Cardiff Entities","Value":"58"},
        {"Text":"Department","Value":"59"},
        {"Text":"GTC/GPL/ENC/IPL/QPL/EAM","Value":"60"},
        {"Text":"GTC/GUC/CUL","Value":"61"},
        {"Text":"GTCConsoleAndOperationalCompanies","Value":"62"},
        {"Text":"GTCOperationalCompanies","Value":"63"},
        {"Text":"Inexus Companies","Value":"64"},
        {"Text":"Investment Companies Only","Value":"65"}, 
        {"Text":"PIL/POL","Value":"66"}],"dataTextField":"HierarchyName","filter":"startswith","autoBind":fal    se,
        "dataValueField":"HierarchyID","placeholder":"Select Hierarchy..."});});
    </script>

jQuery(function(){jQuery(“#addrolecocompany_hierarchy”).kendoMultiSelect({“数据源”:[{“文本”:“所有公司国际财务报告准则\u0026控制台”,“值”:“55”},
{“文本”:“所有过账公司(exc POC\u0026投资)”,“价值”:“56”},
{“文本”:“BUUK组结构”,“值”:“57”},
{“文本”:“加的夫实体”,“值”:“58”},
{“文本”:“部门”,“价值”:“59”},
{“文本”:“GTC/GPL/ENC/IPL/QPL/EAM”,“值”:“60”},
{“文本”:“GTC/GUC/CUL”,“值”:“61”},
{“文本”:“GTCConsoleandOperationalCompanys”,“值”:“62”},
{“文本”:“GTCopeOptionalCompanies”,“值”:“63”},
{“文本”:“美国公司”,“价值”:“64”},
{“文本”:“仅限投资公司”,“价值”:“65”},
{“Text”:“PIL/POL”,“Value”:“66”}],“dataTextField”:“HierarchyName”,“filter”:“startswith”,“autoBind”:fal-se,
“dataValueField”:“HierarchyID”,“占位符”:“选择层次…”});});
更改

.DataTextField("HierarchyName") 
.DataValueField("HierarchyID") 

.DataTextField("Text") 
.DataValueField("Value")

.BindTo(新选择列表(“值”、“文本”))=空模型。您需要在这里使用Model。@Scottie它的语法是什么?'。BindTo(new SelectList(Model.hierarchy,“Value”,“Text”)`或
.BindTo(Model.hierarchy)
假设Model.hierarchy是IEnumerable,并且具有Value和Text属性,我相信两者都可以工作。IIRC,您可能需要将第二个强制转换为.BindTo((IEnumerable)Model.hierachy)。查看示例后,如果您想使用新的SelectList路径,则需要执行.BindTo(新的SelectList(Model.hierarch,“HierarchyId”,“HierarchyName”))将.DataTextField(“HierarchyName”)和.DataValueField(“HierarchyId”)更改为.DataTextField(“Text”)和.数据值字段(“值”)