在模型中,我有long?
字段,我喜欢使用Kendo MultiSelect。这种选择的主要原因是server-side filtering
。它不反映当前Model的值,也不向服务器发送任何值。通过检查流量,我确信它不会更新模型的值。
@(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})
)
我可以设置隐藏字段并更新其值或多选更改,但应该有更好的解决方案。
我应该注意,这个多选是在编辑器模板中,并由弹出编辑器中的Kendo Grid使用。
更新
使用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)
)
答案 0 :(得分:2)
此选择的主要原因是
server-side filtering
您可以在他们的演示网站上找到DropDownList
和ComboBox
也支持该功能。但是,如果你坚持使用MultiSelect
,那么让我们挖掘你的一些代码。
Look Name()
方法会为您的输入元素指定名称,例如input
,select
)。在表单序列化时,它将使用我们的输入名称作为表单的字段属性。如果您使用以&#34结尾的HtmlHelper
;对于"例如(LabelFor
,MultiSelectFor
)输入属性名称将由其绑定属性命名。
Html.Kendo().MultiSelectFor(x => x.theField)
你将
<select name="theField"> ....
您不必再使用Name()
方法,因此根据序列化到服务器的表单,MultiSelect值将绑定为theField
属性。
现在,如果您在控制器内部调试时查看Request.Form["theField"]
,您将看到发送的值。如果选择了多个项目,它通常是连接字符串数组的内容,因此您需要更改theField
类型以处理string
或int
的数组而不是{{} 1}}类型。
修改强>
最后你找到了解决问题的方法,这个解决方案归功于Akbari
使用可空类型时,需要使用.ValuePrimitive(true)