我有Student
的课程,其中有StudentId
,StudentFirstName
,StudentLastName
,Email
,Gender
等字段。已经采用了一个Kendo ComboBox来列出具有过滤功能的学生。
查看代码:
@(Html.Kendo().ComboBoxFor(m => m.StudentId)
.Filter("startswith")
.AutoBind(false)
.HighlightFirst(true)
.Delay(1000)
.Placeholder("Student Name")
.DataTextField("StudentFullName")
.DataValueField("StudentId")
.HtmlAttributes(new { style = "width : 99%;", maxlength = "70" })
.Template("<span class='k-state-default KCombo'> #: data.StudentFirstName# #: data.StudentLastName#, #:data.Gender# </span> <span class='blurText' style ='font-size:14px'> #if (data.Email != '') { #--# } # #: data.Email # </span>")
.DataSource(source =>
{
source.Read(r => { r.Action("GetStudent", "Student"); })
.ServerFiltering(true);
})
.Events(e => e.Change("OnStudentChange").DataBound("OnStudentDatabound"))
)
JAVASCRIPT
function OnStudentChange(e) {
if (e.sender.selectedIndex == -1) {
$("#StudentId").val("");
if($("#StudentId").data("kendoComboBox").text() == ""){
alert("Select student.");
}else{
alert("Select valid student.");
}
}
else {
var data = e.sender.dataSource._data;
$("#StudentId").val(data[e.sender.selectedIndex].StudentId);
}
}
function OnStudentDatabound(e){
if(e.sender.dataSource._total == 0){
$("#StudentId").val("");
}
}
ASP代码
[AllowAnonymous]
[OutputCache(NoStore = true, Duration = 1), HttpGet] // to stop internet explorer from making 304 call.
public JsonResult GetStudent(string text, int includeStudentId = 0)
{
try
{
if (!string.IsNullOrEmpty(text)) {
Expression<Func<Student, bool>> predicate = PredicateBuilder.True<Student>();
predicate = predicate.And(x => x.IsActive == true);
if (!string.IsNullOrEmpty(text))
predicate = predicate.And(x => (x.StudentLastName.StartsWith(text) || x.StudentFirstName.StartsWith(text)));
if (includeStudentId != 0)
predicate = predicate.Or(x => x.StudentID.Equals(includeStudentId));
return Json(base.FindAll(predicate), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
errorLog.Write(ex);
throw ex;
}
}
它工作正常,除非我选择一些学生而不是我擦除学生姓名,最后选择的学生ID显示为文本。