2013-05-03 46 views
5

sto provando ad utilizzare la funzione __doPostBack in modo da poter forzare la mia pagina a fare il pacco postale sul caricamento della pagina, ma ho difficoltà a capire.come utilizzare la funzione __doPostBack in asp.net

quando stavo guardando gli esempi online. Al clic del pulsante, voglio tornare indietro ma non sono sicuro di come completare il codice nel codice sottostante.

Ecco quello che ho finora:

<script type="text/javascript"> 
     function DoPostBack() { 
      __doPostBack('btnNew', 'MyArgument'); 
     } 
    </script> 

Ecco il mio tasto

<asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" OnClick="DoPostBack()" Text="Create" /> 

Non mi sembra di capire da usare "MyArgument" nel codice dietro. Cosa devo fare nel codice dietro in modo che rimandi al caricamento della pagina? Grazie in anticipo per l'assistenza.

+1

semplicemente non capisco perché usi __doPostBack in JavaScript se il pulsante fa comunque postback? – Alexan

+0

Qual è il motivo alla base della scrittura del proprio script di postback per un controllo pulsante (che sta postando comunque come ha affermato Alex)? – Win

+0

Vuoi eseguire un PostBack per il pulsante OnClick? Questo è licenziato automaticamente. Non è necessario aggiungere altro codice per questo. –

risposta

2

I valori passati alla funzione __doPostBack come argomenti verranno inviati al server come parametri di richiesta denominati __EVENTTARGET e __EVENTARGUMENT. ASP.NET utilizza questi valori per determinare quale controllo ha generato un evento e quali argomenti devono essere passati come oggetto EventArgs. Ma è possibile accedervi direttamente utilizzando oggetto HttpRequest:

string eventTarget = this.Request.Params.Get("__EVENTTARGET"); 
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT"); 
+0

ho bisogno di mettere questo codice nel metodo di caricamento della pagina? – moe

+0

@moe, non necessariamente. Per quanto ne so, l'oggetto richiesta è disponibile attraverso tutto il ciclo di vita della pagina. – Andrei

4

Scenario 1

Se si desidera utilizzare la funzione JavaScript per attivare il postback, è necessario sostituire il OnClick con OnClientClick. Modificare la definizione pulsante mi piace questo (sto già assumendo che è annidato all'interno di un UpdatePanel):

<asp:Button ID="btnNew" 
    runat="server" 
    CausesValidation="False" 
    CommandName="New" 
    OnClientClick="DoPostBack();" 
    Text="Create" /> 

Nel codice dietro, nel metodo Page_Load, leggere il Request["__EVENTTARGET"] e la Request["__EVENTARGUMENT"]:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     if (Request["__EVENTTARGET"] == "btnNew" && 
      Request["__EVENTARGUMENT"] == "MyArgument") 
     { 
      //do something 
     } 
    } 
} 

Scenario 2

Se non necessariamente desidera utilizzare JavaScript , Modificare la definizione del pulsante in questo modo:

<asp:Button ID="btnNew" 
    runat="server" 
    CausesValidation="False" 
    CommandName="New" 
    OnClick="DoPostback" 
    CommandArgument="MyArgument" 
    Text="Create" /> 

Quindi, aggiungere il seguente metodo nel codice dietro:

protected void DoPostback(object sender, EventArgs e) 
{ 
    var target = ((Button)(sender)).ClientID; //"btnNew" 
    var argument = ((Button)(sender)).CommandArgument; //"MyArgument" 
    if (target == "btnNew" && 
     argument == "MyArgument") 
    { 
     //do something 
    } 
} 
1

ASP.Net fornisce un modo per voi per costruire una chiamata per eseguire un postback da javascript.

Il Metodo ClientScriptManager.GetPostBackEventReference costruirà il codice è necessario utilizzare in javascript per eseguire un postback da un controllo particolare http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx

Di seguito è riportato un esempio (in VB.Net). Nel codice sottostante sto creando la mia funzione javascript. Il codice ASP.Net inserirà il codice javascript nella mia funzione per eseguire PostBack per il controllo "MyButton". Quando la pagina è stata creata, questa funzione javascript sarà disponibile.Quando il codice javascript effettua una chiamata a questa funzione javascript, eseguirà un PostBack, che simulerà l'azione che si verifica quando si fa clic sul pulsante "MyButton".

Dim csm As ClientScriptManager = Page.ClientScript 
Dim sb As New StringBuilder 
sb.AppendLine("function handleDoPostBack() {") 
sb.AppendLine(csm.GetPostBackEventReference(MyButton, "")) 
sb.AppendLine("}") 
csm.RegisterClientScriptBlock(Me.Page.GetType, "js_code__create_functions", sb.ToString, True) 

Spero che sia quello che stai cercando.

UPDATE

Ecco un esempio di come si potrebbe chiamare la funzione JavaScript che è stato creato per voi sul lato server.

<input type="button" value="Click Me" onclick="handleDoPostBack();" /> 

Ho appena fatto un pulsante normale HTML (invece di utilizzare un pulsante di ASP.Net), perché non ho voglia di ottenere il concetto di un postback pulsante di confondersi con esso. Questo è semplicemente un pulsante HTML che non fa altro che ciò che si programma per farlo. Da quando ho aggiunto la funzione javascript alla chiamata su onclick, quando si preme il pulsante, verrà eseguito il PostBack. Quando si verifica questo PostBack, agirà come se si fosse fatto clic sul pulsante "MyButton"; quello sarebbe un bottone ASP.Net che hai da qualche parte sulla pagina. Dato che quel pulsante è un pulsante ASP.Net, potrebbe già fare un PostBack da solo, motivo per cui penso ci sia una certa confusione sul motivo per cui stai cercando di attivare un PostBack in modo programmatico.

è anche possibile chiamare la funzione JavaScript direttamente nel codice, in quanto tale ...

<script> 
handleDoPostBack(); 
</script> 

Questo accadrà non appena il codice la incontra. Oppure, se lo inserisci in un evento onload, verrà chiamato al termine del caricamento della pagina. Ma come ho detto nel mio commento, dovresti stare attento a questo perché potresti finire con un ciclo inifinito.

Leggendo alcuni dei tuoi commenti nelle altre risposte, il problema che stai cercando di risolvere sembra avere a che fare con i pannelli AJAX che stai utilizzando. Non sono familiare con quelli, quindi non sono sicuro del motivo per cui non funziona per te, e non so se l'attivazione del PostBack programmaticamente risolverà il tuo problema.

Tuttavia, se è necessario attivare un PostBack in modo programmatico, questo è il codice che è possibile utilizzare. Lo uso nei casi in cui non desidero che un pulsante sia presente sulla pagina, ma desidero che un'azione venga eseguita. Quando succede qualcos'altro sulla mia pagina, eseguo un codice javascript che si comporterà come se si fosse fatto clic su un pulsante - e posso gestirlo premendo sul lato server. Nella mia pagina ASP.Net, includo il pulsante, ma poi utilizzo CSS per nascondere all'utente la visualizzazione del pulsante. Quindi l'utente non vede il pulsante, ma il mio codice javascript può chiamare la mia funzione javacript che simulerà un clic di quel pulsante.

+0

ringrazia Rick. Non riesco a seguire il codice, apprezzo se riesci ad elaborare con l'esempio. tutto quello che sto cercando di fare un altro postback quando si fa clic sul pulsante. – moe

+0

Ho appena riletto la tua domanda per capire come implementare questo codice e ho preso la parte per farlo al caricamento della pagina. Quindi, quando la pagina viene caricata, vuoi che faccia automaticamente un PostBack? È corretto? Se è così, dovresti stare attento a questo, b/c, penserei che potrebbe farti entrare in un ciclo infinito; se caricare la pagina, postarla, caricare di nuovo la pagina, postarla di nuovo, ecc. Qual è il tuo obiettivo nel tentativo di forzare il PostBack? Il tuo commento sopra menziona PostBack sul clic del pulsante, quindi è per questo che ero confuso. – Rick

+0

voglio provare il tuo approccio ma non sono sicuro di come seguirlo e provarlo. ecco la mia domanda, dove è il javascript e dove ho bisogno di mettere questo codice sul metodo click del pulsante o caricamento della pagina è per questo che sono confuso su come provarlo e vederlo se funziona. Sono nuovo di questo quindi per favore scusate la mia mancanza di competenze in questo settore. Grazie. – moe

1

sotto il codice funziona per me todo un postback utilizzando C#. Nota Non sto usando il parametro 'MyArgument' e lasciandolo vuoto

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true); 

dove

<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" /> 

Spero che questo aiuti!