2012-11-29 27 views
8

Czy można mieć Ajax.ActionLink (..., ...), aby odświeżyć całą stronę zamiast UpdatetargetID?Aktualizowanie całej strony za pomocą Ajax.ActionLink

Wolę używać Ajax.ActionLink, ponieważ klasyczny Html.ActionLink nie jest metodą POST.

Staram:

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

ale strona nie jest odświeżana, musiałem nacisnąć klawisz F5.

Dzięki.

+0

ciekawy, co jest nie tak z metodą GET? – Dmitry

+2

To nie jest dobry pomysł, używając metody GET do wykonywania zadań, takich jak zmiana stanu rzeczy w aplikacji (usuwanie rekordów, zmiana satus, ...). Tutaj potrzebuję actionLink do zmiany statusu, dlatego nie chcę używać klasycznego html.actionlink, który wykonuje GET. – Bronzato

Odpowiedz

14

Można faktycznie połączyć dwie metody zaproponowane przez gardarvalur, aby uzyskać kod podobny do MVC, który nie wymaga zawijania całej strony w div. Przenieś window.location.reload() wezwanie do nieruchomości onSuccess z AjaxOptions obiekt tak:

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

Nie jQuery zaangażowany, tylko jakiś zwykły stary JavaScript w MVC Ajax actionlink.

+0

używać window.location.href = window.location.href; aby uniknąć ostrzeżenia o replikacji – stuartd

2

Co powiesz na wywołanie ajax w Jquery? Coś takiego.

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

A potem w jQuery coś takiego:

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 
     } 
    }); 

Mam nadzieję, że nie jestem nieporozumienie pytanie (i zdaję sobie sprawę, to nie jest dokładnie to, używając Ajax.ActionLink). ;) Pozdrawiam!

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

A może daleko idące pomysł, mówiąc link do updatetargetid która otacza całą stronę w. Coś tak:

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

a potem owinąć zawartość strony z dIV tagu:

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

mi wiadomo, nie najpiękniejsza rozwiązanie, ale być może to działa dla Ciebie?

+0

Dzięki za sugestię, ale tym razem nie chcę używać jQuery. Wolę bardziej podobne rozwiązanie "MVC". – Bronzato

+0

aaa ok, edytowałem swoją odpowiedź, na wszelki wypadek, gdyby to działało zamiast tego :) – gardarvalur

+0

Korzystając z przeładowania, otrzymuję następujące okno msg "aby wyświetlić stronę ponownie, przeglądarka musi ponownie wysłać informacje, które już wcześniej" – usefulBee

Powiązane problemy