2009-11-16 4 views
1

j'ai un bouton:Le bouton ne capte pas le code C# derrière l'événement, qu'ai-je fait de mal?

<button type="submit" class="contact" onclick="click"> 

et j'ai aC# code derrière la fonction:

protected void click(object sender, EventArgs e) 
{ 
    contact_label.Text = "tester"; 
} 

et il y a une étiquette sur ma page:

<asp:Label id="contact_label"... 

Le problème est quand Je clique sur le bouton la fonction 'clic' n'est pas appelée, pourquoi pas? Comment puis-je y remédier?

Répondre

6

vous avez besoin d'un runat = server

essayez ceci:

<asp:button id="button" runat="server" onclick="click" cssclass="contact"> 

Si vous ne souhaitez pas utiliser le asp: bouton

<button id="button" runat="server" OnServerClick="click" > 

Voici un article expliquant: http://ondotnet.com/pub/a/dotnet/2001/06/21/webforms.html?page=2

Si vous ne souhaitez pas utiliser un bouton côté serveur du tout, vous pourriez sur l'événement page_load vérifier quel bouton a fait l'action submit (via le request.form). Vous n'aurez pas d'objet pour appeler le gestionnaire d'événements, mais vous pouvez utiliser le code dans une autre méthode et effectuer la même action.

+0

ah, vous avez modifié votre a. Pendant ce temps, bien! Vous étiez rapide ;-) – Abel

+0

Merci, je suis allé avec l'événement OnServerClick. La raison pour laquelle j'utilise un bouton plutôt qu'un bouton asp: est due à des problèmes de style, car j'utilise des images. Ce n'est pas la meilleure réponse, mais cela fait partie de «ce que le client voulait» donc je vais avec ça. Merci. – flavour404

+0

C'est ce qu'ils ont inventé 'asp: ImageButton' pour ... – Abel

1

Vous avez besoin d'un peu plus qu'un simple runat="server", vous devez:

  1. Choisissez d'utiliser un ASP.NET asp: classe Button (par opposition à la norme HTML)
  2. Ajouter runat = "server"
  3. Supprimez le code HTML non pertinent:

C'est automatiquement aussi un bouton d'envoi:

<asp:Button 
    CssClass="contact" 
    runat="server" 
    OnClick="click" 
    Text="Hello World" /> 

C# sera maintenant appelé:

protected void click(object sender, EventArgs e) 
{ 
    contact_label.Text = "tester"; 
} 

EDIT: Kevin a montré comment cela peut être fait pour les contrôles HTML par défaut et explique également comment vous pouvez créer des « événements » supplémentaires à l'aide d'un commutateur déclaration dans votre Page_Load. J'ai mal compris la question à l'origine, je vais laisser ma réponse pour les personnes qui veulent travailler avec les contrôles ASP.NET.

+0

Voilà le problème, je ne veux pas utiliser un bouton asp: est-il possible d'appeler le code C# sans lui? – flavour404

+0

Pourquoi ne voudriez-vous pas utiliser le bouton asp:? Vous avez besoin d'un gestionnaire d'événements côté serveur. Qui exige un contrôle côté serveur. Comme Kevin l'a montré, vous pouvez utiliser 'OnServerClick' (apparemment). Bien que je ne vois pas "pourquoi" vous voudriez faire quelque chose comme ça. – Abel

+0

C'est une méthode stylistique. – flavour404

Questions connexes