2009-11-05 3 views
1

ASP.NET MVC를 처음 사용했지만 선택한 범주와 일치하는 기사를 검색해야합니다. 이 쿼리의 결과는 아마도 DHTML-jquery로 "검색 결과"div 오버레이에 기록되어야합니다.ASP.NET MVC - 검색 결과를 Div에 빌드

그래서 액션의 결과가 필요하지만보기를 렌더링하지 않아야합니다. 어떻게 든 Json을 사용하고 결과 레코드를 반복 할 수 있다고 생각했습니다.

RenderPartial을 사용하는 것이 더 쉽습니다 ...하지만이 DHTML 시나리오에서 어떻게 사용합니까?

감사합니다.

답변

1

스티브 샌더슨 (Steve Sanderson)이 자신의 ASP.NET MVC 책에서 설명하는 방식을 좋아합니다. 그것은 JSON과 함께 작동하지만, 부분을 반환합니다. 이렇게하면 Ajax와 Ajax가 아닌 버전을 모두 쉽게 얻을 수 있습니다. 기본적으로 검색은 비 아약스의 게시물과에서 제출

public ActionResult GetArticles(string category) 
{ 
    ... 
    if(Request.IsAjaxRequest()) 
    { 
     return PartialView("ArticleListPartial",articleModel) 
    } 
    else 
    { 
     return View("ArticleListPage",articleModel) 
    } 
} 

:

<form id="articleSearch" method ="post" action="/Article/GetArticles" > 
... 
<input type="submit" value="Get the articles!" /> 
<form> 

그런 다음이

는 cotroller 요청의 종류에 따라보기 또는 일부를 반환 Javascript를 사용할 수있을 때 시작하고 Ajax를 통해 요청을 제출하는 Jquery 스 니펫

<script language="javascript" > 
    $(function() { 
    $("#articleSearch").submit(function() { 
     $.post($(this).attr("action"), $(this).serialize(), function(modelResponse) { 
      ("#articleResultContainer").html(modelResponse); 

     }); 
     return false; 
    }); 
    }); 
</script> 
0

흠, 필터를 사용하려는 것 같습니다.

이 경우 나는 당신의 html 내에서 검색을 시도하는 것은 나쁜 생각이라고 생각합니다. 더 나은 접근 방법은 jQuery를 사용하여 다시 게시하고, 사용중인 데이터베이스에서 결과 집합을 가져온 다음,이를 부분 뷰로서 다시 뷰에 반환하는 것입니다.

데이터베이스를 검색 할 때 sql, Linq2Sql 또는 사용중인 것을 사용하여 그 시점에서 필터를 적용해야합니다.

당신이 여전히 HTML 검색에 지쳐 있다면 각 관련 div에게 class = "DivSearchable"이라는 클래스 이름을 부여 할 것입니다. 그런 다음 jQuery에서 다음과 같은 작업을 수행 할 수 있습니다.

$('.DivSearchable").each(function() { 

var text = $(this).val(); 
"Now test text for contents of your seach string" 
    if (BoolIfFound == true) 
    $(this).addClass("highlightClassName"); 
}); 

highlightClassName은 백그라운드 색을 무언가로 설정하여 어떤 div에 검색 문자열이 포함되어 있는지 확인할 수 있습니다.

의미가 있습니까?

+0

예, 그렇습니다. 'linq를 사용하여 SQL Server DB 쿼리 ... (x => x.Category == categoryVal) 효과가 있습니다. 현재 페이지를 다시로드하지 않으면 부분보기를 사용할 수 있습니까? 나는 같은 페이지에 머물러 있으며 아약스를 사용하여 결과를 얻고 결과 div에 칠합니다. – Scott

+0

가능합니다. 부분 뷰는이 경우에 선호되는 접근 방식 인 클래스 또는리스트 에 바인딩 될 수 있습니다. 그런 다음 컨트롤러에서 PartialClass ("PartialClassName", List )를 반환합니다. 그것이하는 일은, 당신이 염려 할 필요가있는 한 많은 HTML입니다. jQuery 호출 성공에 따라 바인드 된 div를 html로 바꾼다. 작업 완료! 희망이 의미가 있습니다. – griegs

+0

죄송합니다. "bounding div의 html 콘텐츠"를 읽어야합니다. 따라서 div에는 귀하의 콘텐츠를 구성하는 모든 div가 들어 있습니다. 바운딩 div에 클래스 이름을 지정하고 $ ('. YourBoundingDivClassName')을 사용하십시오 .html (NEWHTML); – griegs

관련 문제