我在MVC项目中使用kendo自动完成控制(服务器端过滤),它正确列出了数据。但是问题是当我将数据提交到服务器时,自动完成值ID丢失了。因为此控件中没有DataValueField属性。下面的代码是我正在使用的
@(Html.Kendo().AutoComplete()
.Name("Patient")
.Placeholder("Enter Name")
.DataTextField("TextField")
.Filter("contains")
.MinLength(3)
.HtmlAttributes(new { style = "width:100%" })
.DataSource(source =>
{
source.Read(read =>
{
read.Action("function", "controller")
.Data("onAdditionalData");
})
.ServerFiltering(true);
})
)
如何将值发送到服务器。
谢谢..
答案 0 :(得分:1)
由于AutoComplete
帮助程序没有DataValueField
属性,因此您需要使用其他HTML帮助程序作为解决方法来传递另一个属性值。假设您的视图模型具有以下设置:
public class ViewModel
{
// ID property example
public int PatientID { get; set; }
// other properties
}
您可以创建一个隐藏字段或只读文本框来在Razor视图中存储上述ID属性:
@Html.HiddenFor(m => m.PatientID)
然后,通过创建从自动完成帮助程序读取项目索引的函数,从客户端脚本分配其value
属性:
function selectPatient(e) {
var item = this.dataItem(e.item.index());
$('#PatientID').val(item.PatientID);
}
最后设置绑定到Events
属性的函数名称:
@(Html.Kendo().AutoComplete()
.Name("Patient")
.Placeholder("Enter Name")
.DataTextField("TextField")
.Filter("contains")
.MinLength(3)
.HtmlAttributes(new { style = "width:100%" })
// add this line
.Events(ev => ev.Select("selectPatient"))
.DataSource(source => {
source.Read(read => {
read.Action("function", "controller")
.Data("onAdditionalData");
})
.ServerFiltering(true);
})
)
通过此设置,PatientID
属性应具有用户提交表单时从自动完成帮助器中选择的值的ID。