Problèmes avec asp: Button OnClick event
Question
Voici mon bouton
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />
Voici la fonction serveur
public void doSomething(int num)
{
int someOtherNum = 10 + num;
}
Lorsque j'essaie de compiler le code, le message d'erreur " Nom de la méthode attendu " pour la ligne:
<*>Qu'est-ce que je fais mal? Ne suis-je pas autorisé à transmettre des valeurs au serveur à partir d'un événement OnClick?
La solution
Il y a deux problèmes ici. Tout d'abord, l'événement onclick a une signature spécifique. C'est
MethodName(object sender, EventArgs e);
Deuxièmement, dans le balisage, vous devez passer le nom de la méthode uniquement, sans parenthèses ni paramètres.
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
Modifiez ensuite votre code ci-dessous comme suit:
public void doSomething(object sender, EventArgs e)
{
....
}
La transmission de paramètres peut être effectuée sur un gestionnaire d'événements clic côté client, dans ce cas OnClientClick, mais pas sur le gestionnaire côté serveur.
Autres conseils
Il existe une solution plus simple. Vous pouvez utiliser l'événement OnCommand du bouton ASP. Pour en savoir plus sur: http: // msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
Un clic sur le bouton est un gestionnaire d’événements. Pour associer une fonction à un gestionnaire d'événements, vous devez obéir au contrat défini par le gestionnaire d'événements, comme suit: mentionné par Jose. OnClick est lié à une fonction du format void doSomething(object sender, EventArgs e)
. Votre fonction doit donc être du même format.
Je ne sais pas pourquoi voudrait passer un paramètre au gestionnaire d'événements. Si vous voulez effectuer une manipulation, vous devez le faire en utilisant un autre contrôle.
<asp:TextBox ID="txtNumber" runat="server" /><asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
Et dans le code
public void doSomething(object sender, EventArgs e)
{
int AnotherNumber= Int32.Parse(txtNumber.Text)+10;
}
Vous devez modifier la structure de votre méthode pour qu'elle ressemble à
public void doSomething(object sender, EventArgs e)
{
....
}
et pour passer des paramètres, vous avez besoin d’un moyen de contourner ce problème:
Par exemple, si vous utilisez un contrôle HTML, vous pouvez modifier votre paramètre avec une valeur d'attribut (telle que l'ID dans cet exemple), puis le récupérer dans le gestionnaire côté serveur
.c'est-à-dire faire un contrôle en changeant la couleur du style
Html:
<a href="" id="Grey" runat="server" onserverclick='ApplyStyleEvent'></a>
Code:
protected void ApplyStyleEvent(object sender, EventArgs e)
{
Profile["SelectedStyle"] = ((HtmlControl)sender).ID;
Response.Redirect("");
}
et ainsi de suite.