2011-01-15 4 views
1

jquery를 올바르게 설치했다고 생각합니다. datepicker가 작동하고 있습니다. 그러나 컨트롤러에 자동 완성을위한 중단 점을 넣을 때 텍스트 상자에 입력 할 때 활성화되지 않습니다. 내가 가진 :asp.net mvc jquery autocomplete가 컨트롤러 동작을 활성화하지 않습니다.

필터와 같은 컨트롤러 WOS에 대한 작업입니다
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("input#sitesearchlist").autocomplete('<%= Url.Action("Filter", "Wos") %>'); 
    }); 
    </script> 

:

public ActionResult Filter(string q) 
    { 
     var siteList = _sitesRepository.GetSites(q); 
     return Json(siteList, JsonRequestBehavior.AllowGet); 
     //return siteList; 
    } 

내가 아마 첫 번째 조각으로 갈 JSON없는 간단한 목록을 반환해야합니다 알고 있습니다. 궁극적으로이 ID를 데이터가 아닌 이름으로 설정해야합니다. 즉, 즉각적인 문제를 해결하기위한 간단한 예제입니다. 즉, 컨트롤러 동작에서 데이터를 가져 오지 않았을 때와 중단 점을 설정할 때입니다. , 그것은 첫 번째 실행에 발사하지만 당신은 텍스트 상자에 텍스트를 입력 할 때입니다 :

<%= Html.TextBox("sitesearchlist") %> 

그래서 내가 어떤 점에서 문자 '기'를 캐시 것으로 보인다 때문에 자바가 자동 완성 활성화됩니다 생각 내가 그들을 입력하면 목록은 그 문자 들만으로 텍스트 상자 아래에 나타날 것입니다. 그래도 타이핑을하면 행동이 시작되지 않습니다. 내가 같은 방식으로 박히 시도 상관없이 어떤 이유로 그래서

[{"SiteId":153,"SiteName":"Name of Site"}] 

: 나는 URL을 방문하는 경우

, 나는 같은 JSON 데이터를 얻을 않습니다. Autocomplete는 내 site.master에있는 페이지의 머리 부분에 자바 스크립트를 놓고 텍스트 상자가 분명히 페이지 아래쪽에 있음을 나타냅니다. 나는 json 데이터가오고 (제어기 중단 점이 결코 부딪치지 않는다하더라도) 잘못된 형식으로 목록에 가비지 목록을 가져와야한다고 생각합니까? 어떤 제안 주셔서 감사합니다 !!!!

편집 : this 우수한 페이지를 발견하고 다음과 같이 결국 :

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#tags").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        url: "/Wos/Filter", type: "POST", dataType: "json", 
        data: { searchText: request.term, maxResults: 10 }, 
        success: function (data) { 
         response($.map(data, function (item) { 
          return { label: item.SiteName, value: item.SiteName, id: item.SiteId } 
         })) 
        } 
       }) 
      }, 
      minLength: 3 

     }); 
    }); 
</script> 

[HttpPost] 
    public JsonResult Filter(string searchText, int maxResults) 
    { 
     var siteList = _sitesRepository.GetSites(searchText); 
     return Json(siteList, JsonRequestBehavior.AllowGet); 
    } 

을하고 지금은 잘 작동된다. 이것에 대한 완전한 이해가 없으면 (자바로 시작하는 것만 알 수 있습니까?) 요청/응답이 트릭을 수행하는 것으로 보입니다. 이것은 페이지에서 참조 된 mvc2 변경으로 인해야만합니다. 많은 작업 예제가 나와 간단한 목록으로도 작동하지 않는다고 여기에서 인용 되었기 때문에 여기에 나와 있습니다.

+0

당신이 즉, 또는 모든 브라우저에서이 동작을 볼 수 있습니까 (희망 괄호와 중괄호가 올바른지)하고? – Vadim

+0

방금 ​​FireFox를 사용했습니다. –

+0

대답은 여기 http://theycallmemrjames.blogspot.com/2010/03/jquery-autocomplete-with-aspnet-mvc.html –

답변

1

편집 올바르게 자동 완성 기능을 사용하지 않을 것 같은

는 사실이 보인다.여기에 예를 참조 http://jqueryui.com/demos/autocomplete/#remote-jsonp

시도

$("input#sitesearchlist").autocomplete({source: function(request, response) { 
    $.getJSON('<%= Url.Action("Filter", "Wos") %>', {q: request.term}, function(data) { 
     response($.map(data, function(item) { 
      return {label: item.SiteName, value: item.SiteId}; 
     })); 
    }); 
}}); 
+0

고마워, 그 버그가 나타납니다 그리고 난 그냥 FF로 사용하고 있습니다. –

+0

@Vince 내 업데이트 된 솔루션을 확인하십시오. – Vadim

+0

컨트롤러도 작동하지 않습니다. 나는 또한 url.action을 단순히 "/ Wos/Filter"로 변경했다. 재미있는, 당신이 연결하는 예제 (나는 json이 아니라 원격 데이터를 보았습니다. 감사합니다)는 좀더 장황하지만 작동하는 $ .ajax를 사용합니다. 어쩌면 내 자바 책을 여기에 도착하면 좀 더 이해가 될 것입니다 .... –

0

input#sitesearchlist은 유효한 jQuery 선택기입니까? 확실히, 나는 텍스트 상자에 id를주고 그것에 대해 jQuery selector를 실행했다.

+0

나는 그렇게 생각한다. 그것은 문자 '기'를 캐쉬 한 목록을 내려 놓는다. 그래서 나는 그것이 텍스트 박스에 스크립트를 올바르게 붙이고 있다고 믿는다. –

2

HTH는 HttpPost 등과 같은 속성을 사용하여 필터 기능을 장식하십시오 :

[HttpPost] 
public ActionResult Filter(string q) 
{ 
    var siteList = _sitesRepository.GetSites(q); 
    return Json(siteList, JsonRequestBehavior.AllowGet); 
    //return siteList; 
} 
관련 문제