2013-08-01 4 views
1

MVC를 처음 사용하고 있으며 제안 된 MemberNames를 반환하기 위해 텍스트 상자에서 자동 완성 기능을 사용하려고합니다. 두 가지 문제점이 있습니다 (Problem1 - 사용자의 초기 텍스트 문자를 컨트롤러로 가져오고 Problem2 - 반환 된 컨트롤러 목록이 텍스트 상자 아래에 표시되도록 함).ASP.NET MVC 4 jQuery 자동 완성 문제

보기 :

@section scripts{ 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#autocomplete").autocomplete({ source: '@Url.Action("MemberList", "Grievances", new { autocomplete = $("#autocomplete").val() })' }); 
    });  
    </script> 
} 
... 
<input id="autocomplete"> 

Problem1 - 나는 @의 Url.Action을위한 3 번째 매개 변수에 넣어하지 않을 경우 위의보기에서, 내 컨트롤러는 매개 변수 값 (웹 사이트의 무리 말할에도 불구하고 null을 수신 자동 완성 기능은 자동으로이 값을 바인딩합니다. 이와 같은 I의 세번째 매개 변수의 하드 코드 넣으면

:

new { autocomplete = "ead" } 

는 제어기 파라미터 값 "EAD"수신한다. 위의 코드 블록에있는 코드를 입력하면 세 번째 매개 변수에서 "예기치 않은 문자 '$'가 표시되면서 웹 사이트 오류가 발생합니다.

질문 1 - 자동 완성 텍스트 상자의 값을 컨트롤러로 전달하려면 어떻게해야합니까?

Problem2는 - 여기 내 컨트롤러 코드

public ActionResult MemberList(string autocomplete) 
{ 
var memberNames = (from p in context.Members 
        where p.MemberName.Contains(autocomplete) 
        select p.MemberName).Distinct().Take(10); 
string content = string.Join<string>("\n", memberNames); 
return Content(content); 
} 

때 나는 하드 코드 위의보기에서 3 매개 변수로, 나는 여기 컨트롤러의 값 얻기 ('EAD'와 같은) 값. 컨트롤러는 데이터베이스에서 적절한 레코드 목록을 검색하고이를 다시보기로 리턴합니다. 그러나 아무것도 텍스트 상자 아래에 표시됩니다. 보기에 필요한 JavaScript 및 CSS 파일이 포함되어 있습니다. 값 목록을 하드 코딩하면 텍스트 상자 아래에 적절하게 표시됩니다. 결과를 얻을 수없는 것은 컨트롤러뿐입니다.

질문 2 - 자동 완성 텍스트 상자에 값 목록이 표시되도록 컨트롤러에서 값 목록을 반환하도록하려면 어떻게해야합니까?

이 두 가지 문제에 대한 도움을 주시면 감사하겠습니다. 자동 완성 기능을 사용하는 진흙탕에서 바퀴를 돌리고있는 것처럼 느껴집니다. 함께 다음 줄에 Q1

당신은 jQuery를 ($("#autocomplete").val())과 면도기 (@Url.Action("MemberList", ...)을 믹싱에

답변

0

대답. 면도날은 서버에서 실행되지만 jQuery는 클라이언트에서 실행되므로 오류가 발생합니다.

'@Url.Action("MemberList", "Grievances", new { autocomplete = $("#autocomplete").val() })' 

URL에 세 번째 매개 변수가 필요하지 않습니다. 사용자가 매개 변수 이름 q 또는 '용어'를 입력하게 할 수 있습니다. 당신은 자동 완성에 대한 응답으로 HTML보기를 반환하지해야 Q2

에이

public ActionResult MemberList(string q) 
{ 
... 
} 

답변에 대한 설명서를 참조하십시오. 대신 List (Array) 값을 JSON으로 반환해야합니다.

public JsonResult MemberList(string autocomplete) 
{ 
    var memberNames = (from p in context.Members 
        where p.MemberName.Contains(autocomplete) 
        select p.MemberName).Distinct().Take(10); 
    //string content = string.Join<string>("\n", memberNames); 
    return Json(memberNames.ToList(), JsonRequestBehavior.AllowGet); 
} 
+0

"q"를 문서에서 언급 했으므로 사용하려고 시도했지만 작동하지 않습니다. 나는 당신이 제안한대로 "용어"를 시도하고, 그 작품! Json 팁 또한 효과가있었습니다 (다른 사람이 알아야하는 경우 마지막 행의 "content"로 "memberNames"를 대체해야했습니다). 당신의 도움을 주셔서 감사합니다.나는 당신을 투표 할 것이나, 아직 저를 허용하기에 충분한 명성이 없습니다. – Rexxrally

+0

예, 여러분은'memberNames'에 대해 옳았습니다. 나는 나의 대답을 업데이트했다. 대답이 도움이된다면, 그것을 수락 한 것으로 표시 할 수 있습니다. –

+0

나는 그것을 받아 들였다. 다시 한 번 감사드립니다! – Rexxrally