0

我想使用引導typeahead,但不能讓它調用我的行動(ASP.NET MVC 4)。以下是呈現在瀏覽器中:行動方法沒有得到調用

<div class ="control-group"> 
<div class="controls"> 
    <input autocomplete="off" data-provide="typeahead" data-url="/GetPets" id="Pets" type="text" /> 
</div> 
    </div> 

<script type="text/javascript"> 
    $(function() { 
     $('[data-provide=typeahead]').each(function() { 
      var self = $(this); 
      self.typeahead({ 
       source: function (term, process) { 
        var url = self.data('url'); 

        return $.getJSON(url, { term: term }, function (data) { 
         return process(data); 
        }); 
       } 
      }); 
     }); 
    }); 

我控制器的方法看起來像

[HttpGet] 
    public JsonResult GetPets(string term) 
    { 
     // get data from DB. Here for simplicity sake I just make data up 
     var nameList = new List<string> 
{ 
    "Dog", "Cat", "Ant", "Alligator", "Beaver", "Camel", "Clam", "Dragonfly", "Goat" 
}; 

     var results = nameList.Where(n => n.ToLower().Contains(term.ToLower())); 

     return new JsonResult() 
     { 
      Data = results.ToArray(), 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet 
     }; 
    } 
+0

在'GetPets'動作上設置了一個斷點。確保它被擊中。如果不是,你需要確保'data-url =「...」'有合適的數據。 – Dmitry

+0

德米特里,它從來沒有得到這個動作... – Rafet

+0

然後指定控制器名稱:'.Controller(「WhateverControllerName」)' – Dmitry

回答

0

這似乎是一個URL路由問題。您正在使用「/ GetPets」,但可能需要使用「/ controllerName/GetPets」。作爲建議,嘗試將[HttpPost]用於返回Json並在客戶端使用$ .post的操作。