Salut,
Comme je ne sais pas si tu parles d'un click coté client ou d'un click serveur, je montre les 2.
pour un "click serveur", c'est pas possible directement, mais tu peux contourner en le faisant par reflexion
Pour le "click client", pas de problème.
1 : La déclaration du bouton
<asp:Button ID="Button1" runat="server" Text="unBouton" OnClientClick="genericFunc()" OnClick="GetClickServer" />
2 : la classe principale (WebForm) contient 2 membres string pour les noms des fonctions (client et serveur) qui peuvent bien sur varier, c'est le but.
private string _strServerFuncName = "serverFunc2"; // une méthode serveur (C#)
private string _strClientFuncName = "clientFunc1"; // une fonction client (javascript)
public string ClientFuncName {get { return _strClientFuncName; }}
3 : Pour l'appel client, Dans le head de la page :
<script type="text/javascript">
function genericFunc() {
eval('<%=this.ClientFuncName %>()');
}
function clientFunc1() {
alert("clientFunc1");
}
function clientFunc2() {
alert("clientFunc2");
}
</script>
Pour l'appel serveur, il faut une petite classe contenant les
différentes méthodes à appeler
public class Obj
{
public Obj() { }
public void serverFunc1(object sender, EventArgs e, HttpContext context)
{
context.Response.Write("serverFunc1 clicked...");
}
public void serverFunc2(object sender, EventArgs e, HttpContext context)
{
context.Response.Write("serverFunc2 clicked...");
}
}
Et enfin, le click générique
On passe le HttpContext en paramètre afin de pouvoir dialoguer avec le formulaire aspnet
/// <summary>
/// Click générique dans la webForm
/// </summary>
protected void GetClickServer(object sender, EventArgs e)
{
Type t = typeof(Obj);
BindingFlags commonFlags = BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance;
// Crée l'instance du type contenant les fonctions
Object obj = t.InvokeMember(
null,
commonFlags | BindingFlags.CreateInstance,
null,
null,
null);
// Invoke la fonction appropriée
t.InvokeMember(
_strServerFuncName, // serverFunc1 ou serverFunc2
commonFlags | BindingFlags.InvokeMethod,
null,
obj,
new object[] { sender, e, this.Context });
}
Il y a certainement d'autre façons de faire.
bye...