2011-11-21 13 views
13

C'è un modo per forzare un postback nel codice?Forzare un postback

Sto cercando di forzare la generazione di un postback da un metodo nel codice C# dietro la mia applicazione web asp.net.

+1

Puoi essere più specifico e dirci quali approcci hai provato finora? –

+1

eh, un postback è dal client (browser) al server. Quindi il codice C# (che gira sul server) non può farlo. –

+0

Penso che la tua domanda sia simile a quella sollevata [qui] (http://stackoverflow.com/questions/1418532/how-to-force-a-postback-with-asp-net-and-c-sharp) – seanzi

risposta

9

un postback viene attivato dopo un invio di un modulo, quindi è legato ad un'azione di cliente ... un'occhiata qui per una spiegazione: ASP.NET - Is it possible to trigger a postback from server code?

e qui per una soluzione: http://forums.asp.net/t/928411.aspx/1

+0

Questo ha funzionato! Grazie! –

+2

Per coloro che utilizzano le versioni più recenti di .NET, è necessario utilizzare 'Page.ClientScript.GetPostBackEventReference' poiché 'this.GetPostBackEventReference (...)' è obsoleto. Probabilmente anche 'Page.ClientScript.RegisterStartupScript (...)'. – AzNjoE

1

No, non dal codice dietro. Un postback è una richiesta avviata da una pagina sul client su se stessa sul server utilizzando il metodo Http POST. Sul lato server è possibile richiedere un reindirizzamento, ma la richiesta sarà Http GET.

0

È possibile chiamare manualmente il metodo invocato da PostBack dall'evento Page_Load:

public void Page_Load(object sender, EventArgs e) 
{ 
    MyPostBackMethod(sender, e); 
} 

Ma se vuoi dire se si può avere il set Page.IsPostBack proprietà true senza una vera palo, quindi la risposta è no.

0

È possibile utilizzare un controllo con associazione a dati come Repeater o ListView, associarlo nuovamente a un elenco di proprietà di controllo in base alle esigenze e lasciare che generi i controlli dinamicamente.

In alternativa, è possibile utilizzare Response.Redirect(".") per ricaricare la stessa pagina.

6

Puoi provare a reindirizzare alla stessa pagina.

Response.Redirect(Request.RawUrl); 
+0

Tuttavia, i valori del modulo vengono persi ... –

+0

@Protectorone non a meno che non si visualizzi ViewState [] per primo e si ricarichi sul successivo postback in Page_Load() – Fandango68

4

Più semplice:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack(sender, e)", true); 
0

Utilizzando Server.Transfer ("YourCurrentPage.aspx"); possiamo facilmente ottenerlo ed è meglio di Response.Redirect(); coz Server.Transfer() ti farà risparmiare il viaggio.

+0

Questo non ripristina i campi del modulo? Immagino sia come una nuova chiamata di pagina che significa che gli input dell'utente come i filtri verrebbero annullati (se non vengono memorizzati nella sessione). – Undercover1989

1

Qui la soluzione da http://forums.asp.net/t/928411.aspx/1 come menzionato da mamoo - nel caso in cui il sito Web non sia in linea. Ha funzionato bene per me.

StringBuilder sbScript = new StringBuilder(); 

sbScript.Append("<script language='JavaScript' type='text/javascript'>\n"); 
sbScript.Append("<!--\n"); 
sbScript.Append(this.GetPostBackEventReference(this, "PBArg") + ";\n"); 
sbScript.Append("// -->\n"); 
sbScript.Append("</script>\n"); 

this.RegisterStartupScript("AutoPostBackScript", sbScript.ToString()); 
Problemi correlati