2017-07-28 1 views
1

J'ai un helper Html qui définit une zone de texte utilisée pour alimenter un autocomplete jquery-ui.Url.Action ne peut pas trouver le contrôleur

@Html.TextBox("txtSearchArg") 

Le javascript se trouve dans le dossier/Scripts.

$("#txtSearchArg").autocomplete({ 
    source: function (request, response) { 
     var clinician = new Array(); 
     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: '@(Url.Action("Autocomplete", "Home"))' 
      data: { "term": request.term }, 
      success: function (data) { 
       alert("in success"); 
       response(clinician); 
      }, 
      error: function (response) { 
       alert(response.responseText); 
      }, 
      failure: function (response) { 
       alert(response.responseText); 
      } 
     }); 
    } 
}); 

J'utilise la méthode @ Url.Action de Dans mon HomeController, j'ai une méthode Autocomplete.

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult Autocomplete(string term) 
    { 
     ... JSON gets created here 
     return Json(result3, JsonRequestBehavior.AllowGet); 
    } 

Quand je passe un paramètre d'URL à ma méthode $ .ajax comme le code ci-dessus, la réponse est 404, introuvable. Dans le débogage, le js dynamique montre comme "url: '/ Home/Autocomplete'". Mais quand je passe comme si (copié forme les js dynamiques):

url: '/Home/Autocomplete' 

Il trouve la méthode HomeController saisie semi-automatique très bien. Comment puis-je utiliser la méthode Url.Action pour trouver le HomeController et la méthode de saisie semi-automatique?

Comment utiliser la méthode Url.Action?

+0

Avez-vous ajouté [httpPost]? –

Répondre

2

Vous ne pouvez pas utiliser la syntaxe de rasoir dans un fichier javascript. Vous devrez déplacer votre code vers la vue afin qu'il soit rendu correctement.

pourrait être quelque chose comme une solution possible ceci:

dans votre vue (par exemple fichier .cshtml):

<script> 
    var autoCompleteUrl = '@(Url.Action("Autocomplete", "Home"))'; 
</script> 

Ensuite, dans votre js il suffit de remplacer:

$("#txtSearchArg").autocomplete({ 
    source: function (request, response) { 
     var clinician = new Array(); 
     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: autoCompleteUrl 
      data: { "term": request.term }, 
      success: function (data) { 
       alert("in success"); 
       response(clinician); 
      }, 
      error: function (response) { 
       alert(response.responseText); 
      }, 
      failure: function (response) { 
       alert(response.responseText); 
      } 
     }); 
    } 
});