Kendo ui Kendo MultiSelect的模型绑定失败
在模型中,我有Kendo ui Kendo MultiSelect的模型绑定失败,kendo-ui,kendo-asp.net-mvc,kendo-multiselect,Kendo Ui,Kendo Asp.net Mvc,Kendo Multiselect,在模型中,我有long?字段,我喜欢使用剑道多选。选择此选项的主要原因是服务器端筛选。它不反映当前模型的值,也不向服务器发送任何值。通过检查流量,我确信它不会更新模型的值 @(Html.Kendo().MultiSelectFor(x => x.theField) .Name("msname") .MaxSelectedItems(1) .Placeholder("") .HighlightFirst(true) .DataValueField("I
long?
字段,我喜欢使用剑道多选。选择此选项的主要原因是服务器端筛选
。它不反映当前模型的值,也不向服务器发送任何值。通过检查流量,我确信它不会更新模型的值
@(Html.Kendo().MultiSelectFor(x => x.theField)
.Name("msname")
.MaxSelectedItems(1)
.Placeholder("")
.HighlightFirst(true)
.DataValueField("Id")
.DataTextField("Text")
.AutoBind(true)
.DataSource(ds =>
ds.Read(" ", "API").ServerFiltering(true))
.Value(new long?[] { Model.theField})
)
我可以放置一个隐藏字段并更新其值或multiselect的更改,但应该有更好的解决方案
我应该注意到,这个多选是在一个编辑器模板中,由剑道网格在弹出编辑器中使用
更新
使用nullable
类型时,需要使用ValuePrimitive(true)
!因此,最终代码是:
@(Html.Kendo().MultiSelectFor(x => x.theField)
.MaxSelectedItems(1)
.Placeholder("")
.HighlightFirst(true)
.DataValueField("Id")
.DataTextField("Text")
.AutoBind(true)
.DataSource(ds =>
ds.Read(" ", "API").ServerFiltering(true))
.ValuePrimitive(true)
)
选择此选项的主要原因是服务器端筛选
您可以在他们的演示站点上找到DropDownList
和ComboBox
也支持该功能。但是如果您坚持使用MultiSelect
,那么让我们来挖掘一些代码
查找Name()
方法将为您的输入元素提供一个名称,例如(input
,select
)。当表单序列化时,它将使用我们的输入名称作为表单的字段属性。如果您正在使用以“For”结尾的HtmlHelper
,例如(LabelFor
,MultiSelectFor
)输入属性名称将由其绑定属性命名
Html.Kendo().MultiSelectFor(x => x.theField)
你会有
<select name="theField"> ....
。。。。
您不必再使用Name()
方法,因此MultiSelect值将根据序列化到服务器的表单绑定为field
属性
现在,如果在控制器内部调试时查看Request.Form[“theField”]
,您将看到发送的值。如果选择了多个项目,它通常是连接字符串数组的一个内容,因此您需要更改字段
类型以处理字符串
的数组或int
而不是可空长
类型
编辑
终于你找到了解决问题的方法,这个解决方案归功于阿克巴里
使用可为null的类型时,需要使用.ValuePrimitive(true)
我不能理解你的问题,你能做一个小样本项目,再现你目前的情况吗?也许这会启发我找到解决方案。谢谢你的努力,迪翁,问题是如果模型的字段,
theField
当前为null
,我无法更改它,两个控件都不会更新其值。但是如果它已经有了一些值,我可以更改它,两个控件都会很好地更新它。不幸的是,我无法提供示例。1分钟后请Dion,我想我遇到了问题,可能是因为类型不同,Multi-Select的数据不可为空。请使用大字体更新您的答案,当使用可为空的类型时,您需要使用.ValuePrimitive(true)
!Alhamdulillah,很高兴你找到了路,兄弟。按照你的命令,完成了:D