2014-06-10 4 views
1

난 내 MVC 프로젝트에 여러 값을 자동으로 완성하려고하지만 첫 번째 값과 두 번째 아무것도 발생
내보기 코드 자동 완성 :
MVC JQuery와 자동 완성 여러 값 만

@Html.TextBox("SentUsers", "", new { @class = "text-box"}) 
@Html.Hidden("UsersId") 

자바 스크립트 번호 :

<script type="text/javascript"> 
var customData = null; 
var userId; 
$(function() { 
    $("#SentUsers") 
     .bind("keydown", function (event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
      $(this).data("ui-autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 
     .autocomplete({ 
      minLength: 2, 
      source: function (request, response) { 
       $.ajax({ 
        url: "/Ajax/AutoCompleteUsers", 
        type: "POST", 
        dataType: "json", 
        data: { term: request.term }, 
        success: function (data) { 
         alert(data); 
         customData = $.map(data, function (item) { 
          userId = item.UserId; 
          return { label: item.Name + "(" + item.Email + ")", value: item.Name } 
         }); 
         response(customData, extractLast(request.term)) 
        } 
       }) 
      }, 
      focus: function() { 
       // prevent value inserted on focus 
       return false; 
      }, 
      select: function (event, ui) { 
       var usersIdVal = $("#UsersId").val(); 
       usersIdVal += ", " + userId; 
       $("#UsersId").val(usersIdVal) 

       var terms = split(this.value); 
       // remove the current input 
       terms.pop(); 
       // add the selected item 
       terms.push(ui.item.value); 
       // add placeholder to get the comma-and-space at the end 
       terms.push(""); 
       this.value = terms.join(", "); 
       return false; 
      } 
     }); 
}); 
function split(val) { 
    return val.split(/,\s*/); 
} 
function extractLast(term) { 
    return split(term).pop(); 
} 

컨트롤러 번호 :,

public JsonResult AutoCompleteUsers(string term) 
    { 
     var result = (from r in db.UserItems 
         where r.Name.ToLower().Contains(term.ToLower()) 
         select new { r.Name, r.Email, r.UserId }).Distinct(); 
     return Json(result, JsonRequestBehavior.AllowGet); 
    } 

내가 정적 자바 스크립트 배열 자동 완성 여러 값 완벽한 작업을 시도!


난 오류가이 블록에있을 수 있습니다 생각하지만, 나는 해결책을 내 질문을 해결하기 위해 노력 온몸을

customData = $.map(data, function (item) { 
          userId = item.UserId; 
          return { label: item.Name + "(" + item.Email + ")", value: item.Name } 
         }); 

답변

1

감사를 몰라, 누가, 난 내 질문을 해결 밤은
내보기 코드 :

@Html.TextBox("SentUsers", "", new { @class = "text-box"}) 
@Html.Hidden("UsersId") 
, 여기 것은 모두를위한 솔루션

내 자바 스크립트 코드 :

<script type="text/javascript"> 
$(function() { 
    $("#SentUsers") 
     .bind("keydown", function (event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
      $(this).data("ui-autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 
     .autocomplete({ 
      minLength: 2, 
      source: function(request, response) { 
       $.getJSON("/Ajax/AutoCompleteUsers", { 
        term: extractLast(request.term) 
       }, response); 
      }, 
      search: function() { 
       // custom minLength 
       var term = extractLast(this.value); 
       if (term.length < 2) { 
        return false; 
       } 
      }, 
      focus: function() { 
       // prevent value inserted on focus 
       return false; 
      }, 
      select: function (event, ui) { 
       var usersIdVal = $("#UsersId").val(); 
       usersIdVal += ", " + ui.item.userId; 
       $("#UsersId").val(usersIdVal) 

       var terms = split(this.value); 
       // remove the current input 
       terms.pop(); 
       // add the selected item 
       terms.push(ui.item.value); 
       // add placeholder to get the comma-and-space at the end 
       terms.push(""); 
       this.value = terms.join(", "); 
       return false; 
      } 
     }); 
}); 
function split(val) { 
    return val.split(/,\s*/); 
} 
function extractLast(term) { 
    return split(term).pop(); 
} 

내 컨트롤러 코드 :

public JsonResult AutoCompleteUsers(string term) 
    { 
     var result = (from r in db.UserItems 
         where r.Name.ToLower().Contains(term.ToLower()) 
         select new { label = r.Name + "(" + r.Email + ")", value = r.Name, userId = r.UserId }).Distinct(); 

     return Json(result, JsonRequestBehavior.AllowGet); 
    }