2016-05-31 14 views
0

Ich versuche, eine grundlegende die automatische Vervollständigung über Jquery AJAX zu tun, mit Razor MVC 3 und Visual Studio 2012 (alle von denen ich noch nie zuvor verwendet hatte) Mein Code ist wie folgtRazor MVC 3 Ajax gibt 404

JS :

$(document).ready(function() {   
    $("#city").keyup(function() { 
     var input = $(this).val(); 
     getCities(input); 
    }); 
}); 

function getCities(input) { 
    var serviceURL = $("#autocompleteURL").val();  
    var url = 
     $.ajax({ 
      type: "POST", 
      url: serviceURL, 
      data: { 
       'guess': input 
      }, 
      success: function (data) { 
       alert('OK!!');  
      }, 
     }); 
} 

Da ich gelernt, dass es nicht möglich ist, Razor-Syntax in einer JS-Datei zu verwenden, ich bin über einen versteckten Eingang den Wert aus der Sicht bekommen, wie:

<input type="hidden" id="autocompleteURL" value="@Url.Action("AutoCompleteCity", "Controllers/SearchController")" /> 

Controller:

public class SearchController: Controller 
    { 
     public ActionResult AutoCompleteCity(string guess) 
     { 
      //database stuff here 
     } 
    } 

Ich weiß nicht, ob ich etwas anderes vermisse. Jede Hilfe wird sehr geschätzt. Vielen Dank!

+0

Es muss @ Url.Action ("AutoCompleteCity", "Search") sein, aber keine versteckte Eingabe hinzufügen. Fügen Sie im Element mit 'id =" city "' ein Datenattribut mit 'data-url =" @ Url.Action ("AutoCompleteCity", "Search") "' hinzu und rufen Sie es mit 'var url = $ (this) ab. .data (url); ' –

+0

Toller Vorschlag, danke! –

Antwort

2

Die Konvention für den Controller-Namen ist nur der semantische Name des Controllers, nicht der Dateipfad. Statt dessen:

Url.Action("AutoCompleteCity", "Controllers/SearchController") 

Try this:

Url.Action("AutoCompleteCity", "Search") 

(. Beachten Sie auch, dass Sie die Debugging-Tools in Ihrem Browser verwenden können, um die URL zu prüfen, die in der AJAX-Aufruf verwendet wird)