2013-06-20 6 views
0

JqueryUI 탭에서 검색 양식을 만들고 있습니다. 이 탭에는 Ajax 검색 양식과 검색 결과가 표시된 테이블이 있습니다. 또한 IpagedList를 사용하여 결과 테이블을 페이징했습니다. 컨트롤러의 인덱스 동작에는 Linq 쿼리가 포함되어 있으며 렌더링 할 뷰를 제어합니다. 색인 작업에 대한 코드는 다음과 같은 :두 Ajax 요청을 구별

사용자가 처음 양식 및 데이터베이스에있는 모든 컨설턴트를 보여주는 테이블을 표시하는 부분보기 색인을 렌더링하는 다른 부분이 실행 페이지를로드
public ActionResult Index(ConsultantSearch model, int page = 1) 
    { 
     if (!String.IsNullOrEmpty(model.SearchButton) ||!String.IsNullOrEmpty(model.CancelButton)) 
     {     
      var consultants = from con in db.Consultants 
           where (model.ConsultantName == null || con.ConsultantName.Contains(model.ConsultantName)) && (model.CompanyID == null || con.CompanyID == model.CompanyID) 
           && (model.ClientID == null || con.ClientID == model.ClientID) && (model.VendorID == null || con.VendorID == model.VendorID) && (model.RecruiterID == null || con.RecruiterID == model.RecruiterID) 
           && (model.Class == null || con.Class == model.Class) && (model.W2_1099 == null || con.W2_1099 == model.W2_1099) && (model.IsActive == null || con.IsActive == model.IsActive) 
           && (model.StartDate == null || model.EndDate == null || (con.StartDate >= model.StartDate && con.EndDate <= model.EndDate))&&(model.StartDate == null || con.StartDate >= model.StartDate) && (model.EndDate == null|| con.EndDate <= model.EndDate) 
           select con; 

      consultants = consultants.Include(c => c.Client).Include(c => c.Company).Include(c => c.Recruiter).Include(c => c.SalesPerson).Include(c => c.Vendor); 
      return PartialView("_ConsultantList",consultants.ToList().ToPagedList(page,RecordsPerPage)); 
     } 
     else 
     { 
      var consultants = db.Consultants.Include(c => c.Client).Include(c => c.Company).Include(c => c.Recruiter).Include(c => c.SalesPerson).Include(c => c.Vendor); 
      return PartialView(consultants.ToList().ToPagedList(page, RecordsPerPage)); 
     } 

    } 

. 그러나 검색 버튼 또는 취소 버튼을 클릭하면 if 조건이 충족되고 부분보기 컨설턴트 목록이 렌더링됩니다. 페이지의 결과 테이블 부분 만 갱신합니다.

이제 제 질문은 페이징 컨트롤을 사용할 때 If 조건이 참이고 결과 테이블의 컨설턴트 레코드 중 다음 페이지 만 표시되는 조건을 추가하고 싶습니다. If 조건에서 isAjaxRequest()를 사용할 수 있습니다. 하지만 문제는 (및 테이블을 포함하는) JqueryUI 탭이 isAjaxRequest()로 인해 If 조건이 참이되고 컨설턴트 목록보기 만 렌더링된다는 것입니다.

기본적으로 두 개의 Ajax 요청을 구분하고 싶습니다. Ajax 요청이 탭에 대한 것이면 else 조건이 작동하고 페이징에서 오는 경우 if 조건이 작동해야합니다. 아이디어가 있습니까?

답변

0

컨트롤러 동작 방법을 다시 설계하십시오. 컨트롤러에 조건부 논리를 배치하는 대신 충족해야 할 각 조건에 대한 동작 방법을 추가하고 어느 논리가보기/태그에 요청되는지 논리를 넣습니다.

보기/JavaScript가 적절한 조치 메소드에 대해 ajax 요청을 수행하는 경우 컨설턴트 그리드 또는 일부 검색 결과의 페이지 뷰를로드해야하는지 여부를 알려주는 가장 좋은 방법입니다.

+0

고마워 ... 내 코드를 더 깨끗하게 만들고 내 문제를 해결할 것입니다. – sar

관련 문제