2015-01-26 4 views
0

Telerik MVC UI 자동 완성 기능이 내 EducationEntities와 작동하지만 null을 반환합니다. 왜 그런지 몰라?ASP.NET MVC Telerkik 자동 완성 레코드가 표시되지 않습니다.

@(Html.Kendo().AutoComplete() 
     .Name("students") 
     .DataTextField("DisplayName") 
     .Placeholder("Enter student name") 
     .DataSource(source => 
     { 
     source.Read(read => 
     { 
      read.Action("GetStudents", "StudentDetails").Data("onAdditionalData"); ; 
     }).ServerFiltering(true); 
     })   
     .HtmlAttributes(new { style = "width:240px" }) 
     .Filter(FilterType.Contains) 
     .MinLength(1) 
     .Suggest(true) 
     .Height(340) 
     .HeaderTemplate("<div class=\"dropdown-header\">" + 
        "<span class=\"k-widget k-header\">Photo</span>" + 
        "<span class=\"k-widget k-header\">Contact info</span>" + 
       "</div>") 
     .Template("<span><img src='/Content/Images/${data}.jpg' " + 
         "width='20' height='20' />&nbsp;${data}</span>") 
     .Template("<span class=\"k-state-default\"><h3>#: data.DisplayName #</h3></span>") 
     .Template("<span class=\"k-state-default\"><img src=\"" + Url.Content("~/Content/Images/") + "#:data.StudentID#.jpg\" alt=\"#:data.StudentID#\" /></span>" + 
       "<span class=\"k-state-default\"><h3>#: data.DisplayName #</h3><p>#: data.Address #</p></span>") 
) 

여기에 전체 학생의 정보를 반환해야 내 작업입니다 : 다음은 내 코드입니다. 이에 따라

public JsonResult GetStudents(string name) 
{ 
    //initialize the result 
    var students = new List<StudentModel>(); 

    //check for filter value; if any, than filter 
    if (!string.IsNullOrEmpty(name)) 
    { 
     students = new EducationEntities().Student 
        .Where(student => student.DisplayName.Contains(name)) 
        .Select(student => new StudentModel 
        { 
         StudentID = student.StudentID, 
         DisplayName = student.DisplayName, 
         FirstName = student.FirstName, 
         LastName = student.LastName     
        }).ToList(); 
    } 
    else 
    { 
     //depending on your requirements, you could return all the students when there's no filter set 
     students = new EducationEntities().Student.Select(student => new StudentModel 
        { 
         StudentID = student.StudentID, 
         DisplayName = student.DisplayName, 
         FirstName = student.FirstName, 
         LastName = student.LastName     
        }).ToList(); 
    } 

    return Json(students, JsonRequestBehavior.AllowGet); 
} 

명시 적으로 호출 할 필요가 있습니다

학생 모델

public class StudentModel 
{ 
     public int StudentID { get; set; } 
     public string DisplayName { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
} 

을 만들고 작업을 변경 :

public JsonResult GetStudents(string name) 
    { 
     var students = new EducationEntities().Student.Select(student => new Student 
     { 
      StudentID = student.StudentID, 
      DisplayName = student.DisplayName, 
      FirstName = student.FirstName, 
      LastName = student.LastName     
     }); 

     if (!string.IsNullOrEmpty(name)) 
     { 
      students = students.Where(p => p.DisplayName.Contains(name)); 
     } 

     return Json(students, JsonRequestBehavior.AllowGet); 
    } 
+0

'onAdditionlaData'에서 무엇을 서버에 보냅니 까? –

+0

function onAdditionalData() { return { name : $ ("# students") val() }; } –

+0

올바른 값이 컨트롤러로 전송되는지 확인 했습니까? 중단 점을 설정하고'name' 매개 변수에 들어오는 데이터를 검사하십시오. 그게 네가 원하는대로 말해줘. –

답변

0

이 당신의 행동을 변경해야합니다 ToList() 쿼리를 실행하고 변수를 t로 채 웁니다. 그 결과.

+0

이 오류가 발생했습니다 : 엔티티 또는 복합 형식 'EducationModel.Student'를 LINQ to Entities 쿼리에서 생성 할 수 없습니다. –

+0

@BadarAli, 'Student' 개체가 데이터베이스에 바인딩됩니다. 당신은 그들을 "창조 할"수 없다. 추가 모델을 만들고 선택한 모델을 사용하여 모델을 저장해야합니다. 내 편집 된 답변보기 자세한 내용은 [이 게시물] (http://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query)을 읽어보십시오. –

+1

대단히 감사합니다. Andrei V. –