2009-05-26 19 views
5

Ho Dropdownlist sulla mia pagina e il suo metodoindexchanged selezionato creato nel codice dietro il file (.cs).Come generare un postback falso con javascript?

Volevo creare un falso postback con un tag (evento onmouseover).

Per prima cosa ho visualizzato il codice sorgente di html.

<select name="ctl00$cpholder_ana$ddlFaturaNolar" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" id="ctl00_cpholder_ana_ddlFaturaNolar"> 
    <option selected="selected" value="CHOOSE"></option> 
    <option value="001926">[ 30.04.2009 - 156.492,00 TL ] 001926</option> 
</select> 
  • Poi, ho copiato

    onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" 
    

E, ho creato un tag con evento mouseover (per rendere postback, ma in quanto licenziato da DropDownList)

<a onmouseover="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)">asdasdasdasdad</a> 

Ma non è caduto nel metodo SelectedIndexChanged.

  • Primo, PERCHÉ?
  • In secondo luogo, come posso fare questo?

Grazie da ora.

risposta

11

è possibile utilizzare questo frammento di codice -

__doPostBack('<%= dropdownlist.UniqueID %>', ''); 

Non è possibile utilizzare gli ID unici hard-coded perché possono cambiare a causa di molte ragioni. Ad es. l'ID cambierà se l'id del controllo genitore cambia, ecc. Dovrai ottenere il rendering UniqueID dal lato server usando il codice come quello sopra indicato.

EDIT: Ho dimenticato di menzionare una cosa importante. La pagina verrà postback solo quando il selectedIndex della discesa cambia :) Quindi, se si vuole sparare tal caso, cambiare l'indice del menù a tendina con questo e poi chiamare il codice __doPostBack -

document.getElementById("<%= dropdownlist.UniqueID %>").selectedIndex = 1; 
__doPostBack('<%= dropdownlist.UniqueID %>', ''); 

EDIT2: Aggiunta su ciò che ha detto Bob, è possibile utilizzare i controlli server nascosti. Ti suggerisco di usare un asp: controllo nascosto e collegare il suo evento OnValueChanged. Quindi, ogni volta che vuoi postare la tua pagina sul server, devi solo cambiare il valore della tua variabile nascosta. In questo modo non dovrai usare un pulsante nascosto.

document.getElementById("<%= hiddenField.UniqueID %>").value = (new Date()).getTime(); 
+0

ho cambiato: asdasdasdasdad Ma non funziona. – uzay95

0

Un'altra opzione si può provare, che trovo più facile ed è come probabilità di rottura, è quello di creare un nascosto (style = "display: none" non usare la proprietà visibile) asp: Button sul tuo pagina. Quando si desidera inviare di nuovo si può solo simulare il click su tale pulsante

document.getElementById("<%= Button1.ClientID %>").click(); 

Se si vuole attaccare al distacco di nuovo in discesa, assicurarsi che la proprietà AutoPostBack della discesa è ancora impostata su true. Tieni presente che questo comportamento è un po 'strano, stai sparando a un evento selezionato modificato con un mouse. Non solo questo è un po 'di confusione, ma aumenta anche il rischio di postback accidentali, poiché è molto facile passare il mouse sopra qualcosa e aspettarsi che non accada nulla.

0

Non è <%= ddlFaturaNolar.ClientID %>?

+0

ClientID non funziona per i pulsanti, ecc. Quindi è meglio usare UniqueID per ogni controllo. – Kirtan

+0

Stanno generando gli stessi risultati (ho provato) :) – uzay95

+0

Ok, quindi ignora la mia risposta. :-) – janhartmann

1

Mi dispiace dire ragazzi

__doPostBack non sta funzionando per DropDownList, ma si sta lavorando per Button. Quindi fare una cosa

Aggiungere un pulsante che dovrebbe essere seguita come questo

<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" 
OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"> 
    <asp:ListItem Text="All" Value="0" Selected="True"></asp:ListItem> 
    <asp:ListItem Text="Published" Value="1"></asp:ListItem> 
    <asp:ListItem Text="Pending" Value="2"></asp:ListItem> 
    <asp:ListItem Text="Rejected" Value="3"></asp:ListItem></asp:DropDownList> 

ora chiamare il metodo __doPostBack

__doPostBack('<%= btnRefresh.UniqueID %>',''); 
Problemi correlati