Generazione di script lato client per il postback
Il postback del form è determinato solo da due elementi del form HTML, pulsante e pulsante immagine. Se il controllo personalizzato esegue il rendering di un elemento HTML che non determina il postback (ad esempio, una casella di testo o un pulsante di collegamento) e si desidera che il controllo avvii il postback, è possibile programmare l'esecuzione di questa operazione in ASP.NET mediante un'architettura di eventi basata su script lato client (JScript, JavaScript).
Affinché i controlli siano in grado di attivare questo meccanismo di postback, gli sviluppatori di controlli devono apportare alcune semplici modifiche ai controlli. Nella porzione di codice riportata di seguito viene illustrato (in grassetto) il codice che è necessario aggiungere al metodo Render di un controllo per l'avvio del postback.
protected override void Render(HtmlTextWriter output) {
output.Write("<a id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this) +"\">");
output.Write(" " + this.UniqueID + "</a>");
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
output.Write("<a id=""" & Me.UniqueID & _
""" href=""javascript:" & _ Page.GetPostBackEventReference(Me) & """>")
output.Write(" " & Me.UniqueID & "</a>")
End Sub
Il metodo GetPostBackEventReference emette uno script lato client che avvia il postback e fornisce un riferimento al controllo che ha avviato l'evento postback.
Per comprendere le operazioni eseguite dal metodo GetPostBackEventReference, compilare il codice riportato nella sezione successiva Esempio di postback mediante script lato client e aprire la relativa pagina ASPX nel browser. Se si visualizza il codice sorgente della pagina di cui è stato effettuato il rendering utilizzando il comando HTML del browser, verranno visualizzati il codice HTML e lo script riportati di seguito. I valori effettivi degli attributi ID e del nome del form saranno differenti così come l'attributo value della variabile nascosta.
<html>
<body>
<form name="ctrl2" method="POST" action="MyLinkButton.aspx" id="ctrl2">
<input type="hidden" name="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" value="dDwtMjI1NTgwNDE2Ozs+eIZ+AfRvoCj1nWimbh+zPv/rKNg=" />
Here is the custom link button.<br>
<a id ="Link" href="javascript:__doPostBack('Link','')"> Link</a>
<br><br>
<input name="TextBox" type="text" value="Click the link" id="TextBox" style="background-color:Cyan;width:200px;" />
<br>
<script language="javascript"><!-- function __doPostBack(eventTarget, eventArgument) { var theform = document.ctrl2 theform.__EVENTTARGET.value = eventTarget theform.__EVENTARGUMENT.value = eventArgument theform.submit() }// --></script>
</form>
</body>
</html>
Gli elementi visualizzati in grassetto in questo esempio, due campi nascosti e il metodo di script lato client, vengono aggiunti dal framework di pagina ASP.NET. I campi nascosti del form indicano i controlli server da inviare ed eventualmente specificano un argomento da passare. Il metodo di script lato client viene utilizzato per impostare i campi nascosti e inviare il form al server. Per un esempio completo, vedere Esempio di postback mediante script lato client.