2012-11-29 22 views
8

È possibile avere un Ajax.ActionLink (..., ...) per aggiornare l'intera pagina anziché un UpdatetargetID?Aggiornamento di tutta la pagina con Ajax.ActionLink

Preferisco usare un Ajax.ActionLink perché il classico Html.ActionLink non è un metodo POST.

cerco:

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

Ma la pagina non viene aggiornata, ho dovuto premere F5.

Grazie.

+0

solo curioso, cosa c'è di sbagliato nel metodo GET? – Dmitry

+2

Questa non è una buona idea usare un metodo GET per eseguire compiti come cambiare lo stato di cose in un'applicazione (cancellare record, cambiare satus, ...). Qui ho bisogno di un actionLink per cambiare lo stato è per questo che non voglio usare un classico html.actionlink che esegue un GET. – Bronzato

risposta

14

È possibile combinare i due metodi proposti da gardarvalur per ottenere codice simile a MVC che non richiede il wrapping dell'intera pagina in un div. Spostare window.location.reload() chiamata alla proprietà OnSuccess dei AjaxOptions oggetto come questo:

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

No jQuery coinvolto, solo alcuni pianura vecchio javascript in un MVC Ajax ActionLink.

+0

Had usare window.location.href = window.location.href; per evitare l'avviso di ripubblicazione – stuartd

2

Che ne dici di una chiamata ajax in Jquery? Qualcosa come questo.

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

E poi in jQuery qualcosa di simile:

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

spero non sto equivoco tua domanda (e mi rendo conto che questo non è esattamente utilizza ajax.actionlink). ;) Saluti!

########## A cura #########

O forse un idea molto inverosimile, raccontando il link al updatetargetid che avvolge tutta la pagina in. Qualcosa in questo modo:

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

E poi avvolgere il contenuto della pagina con questo tag div:

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

lo so, non la più bella soluzione, ma forse funziona per te?

+0

Grazie per il tuo suggerimento ma non voglio usare jQuery questa volta. Preferisco una soluzione più "MVC". – Bronzato

+0

aaa ok, ho modificato la mia risposta, nel caso in cui ciò funzionasse invece :) – gardarvalur

+0

Usando il ricarico, ottengo il seguente riquadro msg "per visualizzare nuovamente la pagina Web il browser deve inviare nuovamente le informazioni che hai precedentemente" – usefulBee

Problemi correlati