2012-11-29 10 views
8

Ist es möglich, einen Ajax.ActionLink (..., ...) zu haben, um die ganze Seite anstelle einer Updatezielkennung zu aktualisieren?Die ganze Seite mit einem Ajax.ActionLink aktualisieren

Ich bevorzuge die Verwendung eines Ajax.ActionLink, weil der klassische Html.ActionLink keine POST-Methode ist.

Ich versuche:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure ?" }, null) 

Aber die Seite nicht aktualisiert wird, hatte ich F5 zu drücken.

Danke.

+0

nur neugierig, was ist los mit GET-Methode? – Dmitry

+2

Dies ist keine gute Idee, wenn eine GET-Methode zum Ausführen von Aufgaben verwendet wird, z. B. zum Ändern des Status von Dingen in einer Anwendung (Löschen von Datensätzen, Ändern von Satus, ...). Hier brauche ich einen actionLink um den Status zu ändern, deshalb möchte ich keinen klassischen html.actionlink verwenden, der ein GET durchführt. – Bronzato

Antwort

14

Sie können die beiden von gardarvalur vorgeschlagenen Methoden kombinieren, um MVC-ähnlichen Code zu erhalten, bei dem nicht die gesamte Seite in ein div-Format eingeschlossen werden muss. Bewegen window.location.reload() Aufruf der OnSuccess Eigentum der Ajaxoptions-Objekt wie folgt aus:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", OnSuccess="window.location.reload()" }) 

Keine jQuery beteiligt, um nur einige einfache alte Javascript in einer MVC-Ajax Action.

+0

Had zu verwenden window.location.href = window.location.href; Um die Neuwarnung zu vermeiden – stuartd

2

Was ist mit doin Ajax Anruf innerhalb Jquery? Etwas wie das.

<button onclick="SomeFunction()" type="button" >Click me</button> 

Und dann in JQuery etwas wie folgt aus:

function SomeFunction() 
{ 
    var url = '/MyController/MyAction/'; 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: { value: '1234' }, //if there are any parameters 
     dataType: "html", //or some other type 
     success: function (data) { 
      window.location.reload(true); 
      // or something in that area, maybe with the 'data' 
     }, 
     error: function() { 
     //some derp 
     } 
    }); 

Ich hoffe, ich bin nicht Ihre Frage Missverständnisse (und ich weiß, das ist nicht genau Ajax.ActionLink verwenden). ;) Grüße!

########## EDITED #########

Oder vielleicht ein weit hergeholt Idee, den Link zu updatetargetid zu sagen, dass in Ihrer ganzen Seite umbricht. Etwas wie folgt aus:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure ?", UpdateTargetId = "TheDivToUpdate" }, null) 

Und dann den Inhalt Ihrer Seite mit diesem div-Tag wickeln:

<div id="TheDivToUpdate"> 
    //The content of your page 
</div> 

weiß ich, nicht die schönste Lösung, aber vielleicht klappt es für dich?

+0

Vielen Dank für Ihren Vorschlag, aber ich möchte dieses Mal nicht jQuery verwenden. Ich bevorzuge eine "MVC" ähnliche Lösung. – Bronzato

+0

aaa ok, ich habe meine Antwort bearbeitet, nur für den Fall, dass das stattdessen funktionieren würde :) – gardarvalur

+0

Mit reload bekomme ich die folgende msg-Box "um die Webseite erneut anzuzeigen, muss der Webbrowser die Informationen, die Sie zuvor hatten, erneut senden" – usefulBee

Verwandte Themen