2014-02-28 1 views
5

JSON 컨트롤러에서 원하는 결과를 가져올 수 없습니다. 나는 인터넷을 수색했으나 제안 된 해결책이 내 문제를 해결할 수는 없었다.json 결과에서 값을 검색 할 수 없습니다. MVC 4

내 컨트롤러 조치 :

window.location.replace('http://' + location.host + '/Category/Details/' + ui.id); 

: 그것은 productId에를 반환하지 않습니다

$(document).ready(function() { 


      var displayLimit = 7; 


    // jqueryui autocomplete configuration 
    $("#term").autocomplete({ 
        source: function (req, resp) { // get JSON object from SearchController 
      $.ajax({ 
       url: "/Search/AutoComplete", // SearchController JsonResult 
       type: "POST", 
       dataType: "json", 
       data: { term: req.term }, 
       success: function (data) { 
        resp($.map(data, function (item) { 

         return { label: item.Name, value: item.Name, imageURL: item.ImageURL, id: item.ID }; 
        } 

        )); 
       } 
      }); 
     }, 



     select: function (event, ui) { // keyword selected; parse values and forward off to ProductController's ViewProduct View 
      var selected = ui.item; 
      var mdlNum, mdlName; 

      if (selected.value !== null) { 
       var array = selected.value.split(' '); 
       mdlNum = array[0].toLowerCase(); 
       // mdlName = selected.value.replace(array[0], '').trim().toLowerCase().replace(/[^a-z0-9]+/g, ' '); 
       // window.location.replace('http://' + location.host + '/Search/Refine?ref=' + mdlNum + '' + mdlName); 
       window.location.replace('http://' + location.host + '/Category/Details/' + ui.id); 

      } 

     }, 

     open: function() { $('ul.ui-autocomplete').addClass('opened') }, 
     close: function() { $('ul.ui-autocomplete').removeClass('opened').css('display', 'block'); } 


    }) 

.data("ui-autocomplete")._renderItem = function (ul, item) { 

      //var inner_html = '<a><div id="example" class="k-content"><div class="demo-section"><div class=".customers-list img"><img src="' + "../common/theme/images/gallery/3.jpg" + '"></div><div class="customers-list h3">' + item.label + '</div><div class="customers-list p">' + item.description + '</div></div></div></a>'; 


      var newText = String(item.value).replace(
        new RegExp(this.term, "gi"), 
        "<strong>$&</strong>" 
       // "<span class='ui-state-highlight'>$&</span>" 
        ); 

      var inner_html = '<a><div class="list_item_container"><div class="image"><img src="' + item.imageURL + '" alt="" /></div><div class="labels">' + newText + '</div><div class="description">' + item.id + '</div></div></a>'; 


      return $("<li></li>") 
       .data("item.autocomplete", item).append(inner_html) 
       .appendTo(ul); 

     }; 

, 나는이 줄에 오류를 가지고있다 : 이것은 내 jQuery를 아약스 파일

public JsonResult AutoComplete(string term) 
     { 
      var result = (from c in db.CategoryContents 
          where c.Title.ToLower().Contains(term.ToLower()) 
          select new { c.Title, c.ImageURL, Description = c.Category.Name + " Review" }).Distinct(); 
          return Json(result, JsonRequestBehavior.AllowGet); 
     } 

입니다

/Category/Details/undefined라고 말하고 있지만대신 여기 id을 원합니다.. 도와주세요.

답변

2

자동 완성에서 ID을 반환해야합니다. 이는 투영에서 누락되었습니다. 다음 대신에

변경이 :

var result = (from c in db.CategoryContents 
          where c.Title.ToLower().Contains(term.ToLower()) 
          select new { c.Title, c.ImageURL, Description = c.Category.Name + " Review", ID = c.ID }).Distinct(); 
          return Json(result, JsonRequestBehavior.AllowGet); 

위 당신의 ID DB를에 대문자 있다고 가정합니다.

+1

내 문제가 해결되었지만 오류가있는 renderItem 메서드를 코드에 적용하면 jquery 코드를 편집 할 수있게되었습니다. – Anony

+0

http://stackoverflow.com/questions/22097793/unable-to-render-html-in-jquery-autocomplete-mvc4 이것은 선생님, 제발 도와주세요. – Anony

1

jQuery UI 자동 완성에는 labelvalue 속성을 가진 데이터 소스가 필요합니다. 추가 속성 (imageURLid)을 전달하더라도 해당 전화 번호는 select 콜백에서 사용할 수 없습니다.

변경이 :

resp($.map(data, function (item) { 
    return { label: item.Name, value: item.ID, imageURL: item.ImageURL, id: item.ID }; 
} 

그리고 이것은 각 제안 항목에 대한 value는 웹 서비스에서 item.ID로 설정되도록

window.location.replace('http://' + location.host + '/Category/Details/' + ui.item.value); 

나는 그것을 변경했습니다. 이 경우 콜백에서 ui.item.value을 통해 사용할 수 있습니다.

관련 문제