[C# 2.0] asp:button e postBackUrl

sabato 02 gennaio 2010 - 18.30

Gluck74 Profilo | Guru

Salve a tutti,
vorrei capire bene come si usa il postBackUrl e il commandArgument per un button.
Io ho questo codice:

<asp:Button ID="btnNewContratto" runat="server" Text="Aggiungi..." style="float:right;" CommandName="newContratto" CommandArgument='<%# Eval("ID") %>' CausesValidation="false" UseSubmitBehavior="true" PostBackUrl="~/PostVendita/newContract.aspx" />

Nella pagina "newContract.aspx", come diavolo lo ritrovo il valore passato come CommandArgument?

Ciao Ciao

martinez Profilo | Senior Member

Ciao e buon Anno ....
La funzione CommandArgument dell'interfaccia IButtonControl restituisce oppure imposta un parametro opzionale passato all'evento Command del pulsante unitamente al CommandName associato ...
per cui non so dirti se nel postBackUrl questo sia rintracciabile ...

Io francamente utilizzo sempre dei campi testo visibili e/o nascosti per trasportare dati da una pagina all'altra nei seguenti modi:

codice del bottone:

<asp:button runat="server" id="btnPost" text="Click" PostTargetUrl="~/Target.aspx" />

recupero i dati di un eventuale TextBox1 dalla pagina target in questo modo:

TextBox txt = (TextBox) PreviousPage.FindControl("TextBox1");

con questo metodo è possibile accedere a qualsiasi controllo di input definito sulla pagina che effettua il post ...

da notare che se i controlli si trovano all'interno di template si deve prima ottenere un riferimento al contenitore e poi ricercare il controllo all'interno di esso ...

L'altro metodo più "bello" è quello dell'utilizzo della direttiva @PreviusPageType che può accettare due attributi "VirtualPath" e "TypeName" il primo punta alla URL dellla pagina chimante il secondo indica il tipo di pagina chiamante ...
ad esempio:

<%@ PreviusPageType VirtualPath="paginacross.aspx" %>

rende la direttiva PreviousPage della classe della pagina target dello stesso tipo della pagina di cui è specficato il percorso .. (resta evidente che in questo caso bisogna sapere sempre a priori che la pagina target sarà sempre chiamata solo da quella previus) ...

questo fatto però non è sufficiente a permettere di accedere direttamente ai controlli di input della previus in quanto i controlli in essa contenuti sono dichiarati protected e non accessibili dall'esterno per cui devi realizzare delle proprietà pubbliche ad hoc nella pagina chiamante che espongano le informazioni di cui hai bisogno continuando con l'esempio della textbox avremo nella chiamante:

public TextBox TextBox1 { get { return _textBox1; } }

e dalla target lo richiami con:

Response.Write(PrevoiusPage.TextBox1.Text);

in ultima analisi se la pagia target è una pagina "duale" ossia che può anche essere richiamata da altre pagine senza l'utilizzo del postback o semplicemente da un link o altro ...

inserendo del codice "extra" se ne può gestire il comportamento utilizzando la proprietà PreviousPage che nel caso in cui la pagina sia invocata direttamente restituisce "null" ...

if (PreviousPage == null) { ... } else { .... }

spero di aver chiarito ...

Ciao

Gluck74 Profilo | Guru

Più chiaro di così neanche Bochicchio l'avrebbe fatto.
Grazie

martinez Profilo | Senior Member

hahaahah!

grazie del complimento hehehehehe ... ma se ci sente Daniele mi sa che se la prende :)

Buona giornata!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5