2014-03-24 10 views
9

Dies sollte nur das UpdateTarget ersetzen, aber es nicht, es ersetzt die gesamte Seite und ich sehe nicht warum. Die richtige Teilansicht wird zurückgegeben, ersetzt jedoch nicht die Ziel-ID, sondern ersetzt die gesamte Seite.Warum aktualisiert Ajax.ActionLink ganze Seite statt nur UpdateTarget

<div id="magHeader"> 
     <p>this is a test.</p> 
     @Ajax.ActionLink("Edit", "GetEditor", "Home", new AjaxOptions(){ UpdateTargetId = "magHeader", InsertionMode = InsertionMode.Replace}) 
</div> 

Zur Laufzeit sieht der Link wie folgt:

<a href="/Home/GetEditor" data-ajax-update="#magHeader" data-ajax-mode="replace" data-ajax="true">Edit</a> 

Gibt es etwas, was ich falsch mache? Habe das in der Vergangenheit erfolgreich ohne Probleme gemacht.

bearbeiten Der Grund für dieses Problem ist, dass in VS 2012, nur hinzufügen benötigt einen Verweis auf die JQueryVal bündeln diese Arbeit zu machen. Im Jahr 2013 wurde BundleConfig.cs jedoch geändert, sodass das JQueryVal-Bundle JQuery.Unobtrusive nicht mehr enthält. Also die einfache Lösung ist, es wieder in das Bündel hinzuzufügen:

Dann wird alles wie erwartet funktionieren.

Antwort

11

Überprüfen Sie, ob Sie @Scripts.Render("~/bundles/jqueryval") in Ihre Seite irgendwo laden oder nicht. Es ist wahrscheinlich, weil unauffällige JavaScript-Datei nicht geladen wird. Überprüfen Sie diese video

Bearbeiten:
Bitte überprüfen Sie, ob Sie dort Pakete in Ihrer packages.config-Datei installiert sind.

<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.1.1" targetFramework="net451" /> 
    <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.0.0" targetFramework="net451" /> 
+0

OK, also habe ich das Video angeschaut und das ist genau das Problem, das ich habe. Es ist jedoch immer noch nicht gelöst. Ausgehend von einem neuen Projekt in VS 13 befolge ich die Schritte im Video und stelle sicher, dass jqueryval enthalten ist. Aber die ganze Seite ist immer noch ersetzt. In FireFox kann ich die Registerkarte Skripts überprüfen und sehen, dass jqueryval sowie jquery.validate.unobtrusive.js geladen wird. Es macht also keinen Sinn. –

+0

Haben Sie diese Pakete hinzugefügt (Ich habe meine Antwort bearbeitet) – Mitul

+0

Ich habe überprüft und diese Pakete wurden nicht installiert. Also habe ich sie installiert. Allerdings bekomme ich immer noch das gleiche Ergebnis - die Seite wird ersetzt, nicht die ID. –

3

Dies diesem Hauptgrund wegen nicht auf der Haupt-Layout oder Kind Ansicht enthalten, habe ich Angst, dass man sie fehlen, gehören die Jquery-Datei und jquery unaufdringlich Ajax, die Ihr jquery Skript geschieht , jquery unaufdringliche Ajax-Dateien im Blick und es wird wie ein Zauber wirken.

1

Hinzufügen von unten Skriptdatei Verweis funktioniert.

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
Verwandte Themen