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