【发布时间】:2014-12-15 15:10:32
【问题描述】:
我正在尝试使用 mvc 5 将我的剑道多选绑定到模型中的属性,但是我得到的只是未定义元素的列表。该列表在控制器级别是正确的,查看源代码列表是正确的,但我无法可视化该列表。
同样令人费解的是,列表中未定义的元素比模型中的实际列表中的项目更多。
谁能解释发生了什么或告诉我如何调试和解决我遇到的问题。
型号:
[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>
【问题讨论】:
-
.BindTo(new SelectList("Value", "Text")) = 空模型。你会想在这里使用模型。
-
@Scottie 的语法是什么? '.BindTo(new SelectList(Model.hierarchy, "Value", "Text"))` 或
.BindTo(Model.hierarchy) -
假设 Model.hierachy 是 IEnumerable 并且具有 Value 和 Text 的属性,我相信任何一个都可以。 IIRC,您可能需要将第二个转换为 .BindTo((IEnumerable)Model.hierachy)。
-
看了你的例子之后,如果你想去新的 SelectList 路线,你需要做 .BindTo(new SelectList(Model.hierarch, "HierarchyId", "HierarchyName"))
-
将 .DataTextField("HierarchyName") 和 .DataValueField("HierarchyID") 更改为 .DataTextField("Text") 和 .DataValueField("Value")
标签: c# asp.net-mvc-5 kendo-asp.net-mvc