2012-10-12 17 views
5

Ich versuche, eine MVC-Website mit Ajax Anruf zu machen. Ich habe kein Problem, direkt jquery zu verwenden, aber wenn ich @ Ajax.ActionLink verwende, bekomme ich nicht das Ergebnis, das ich will. Hier ist meine Ansicht:MVC 4 Ajax.Action Link wird nicht funktionieren

<script type="text/javascript"> 
     function deleteComment(id) { 
      $.post(
       "/Role/AjaxTest", 
       //{ id: id }, 

       function (data) { 
        $("#testtarget").html(data);    
       }); 
     } 
    </script> 


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <h2>TITLE</h2> 
    <p> 
@Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p> 
    <table>  
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.RoleName) 
      </td> 
      <td> 
       <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a> 
       @Html.ActionLink("Delete", "Delete", new { id=item.RoleId }) 

      </td> 
     </tr> 
    } 
    </table> 
    <div id="testtarget">Test Div</div> 

und hier ist meine Controler Daten:

public string AjaxTest() 
{ 
    return "Some random text"; 
} 

My Call auf JQuery funktioniert perfekt und Text erscheint in der div, aber meine Action leitet mich nur an: localhost/Rolle/AjaxTest, also habe ich gerade die Nachricht in einem Bankbrowser.

Irgendeine Idee, was hier falsch ist?

Vielen Dank im Voraus!

+0

Sind Sie sicher, dass die 'jquery.unobtrusive-ajax.min.js'-Datei geladen wird? –

+0

Ja, wenn ich auf Link in meiner Webseite klicke Quelle: öffnet es. – Tom

Antwort

9

Stellen Sie sicher, das jquery.unobtrusive-ajax.js Skript zu Ihrer Seite hinzugefügt haben:

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script> 

oder wenn Sie Bundles verwenden (das ist der empfohlene Ansatz ist) stellen Sie sicher, dass Sie ein Bündel enthalten sind, dieses Skript enthält. Zum Beispiel, wenn Sie ein neues ASP.NET MVC 4 Projekt mit dem Internet Vorlage erstellen, die wäre die ~/bundles/jqueryval Bundle:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*", 
    "~/Scripts/jquery.validate*") 
); 

So sicher machen es Ihrer Ansicht nach der jquery Bundle enthalten ist:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

Oder kombinieren Sie sie einfach zu einem einzigen Bündel. Es hängt alles von Ihren Anforderungen ab und ob Sie eine unauffällige jQuery-Validierung benötigen oder nicht.

würde ich empfehlen Sie auch Ihre Controller-Aktion Rückkehr Action haben und nicht string:

public ActionResult AjaxTest() 
{ 
    return Content("Some random text"); 
} 
+1

Perfekt, vielen Dank, alles, was du gesagt hast, war in meinem Projekt, ich hatte einfach nicht das @ Scripts.Render ("~/bundles/jqueryval"). Also habe ich es zu meiner Seite hinzugefügt und es hat den Trick gemacht, ist es "weise", dies in die Layout-Masterseite zu bringen? Ich würde raten, wie es in vielen Seiten verwendet wird. Vielen dank für Deine Hilfe! War für so wie 4 Stunden fest ... – Tom

2

Versuch F12 in Ihrem Browser verwenden und prüfen, wenn Sie Skriptfehler in der Konsole erhalten. Fiddler hilft Ihnen auch dabei, herauszufinden, ob Ihre Bibliotheken nicht korrekt referenziert oder geladen sind.

+0

Danke! Das war Teil meines Problems, es wurde nicht definiert, also habe ich getan, was der nächste Post vorgeschlagen hat. – Tom