Kendo ComboBox不能正常工作

时间:2014-10-17 06:40:53

标签: javascript kendo-ui asp.net-mvc-5 kendo-combobox

我有Student的课程,其中有StudentIdStudentFirstNameStudentLastNameEmailGender等字段。已经采用了一个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显示为文本。 Like image here

0 个答案:

没有答案