2009-11-20 3 views
0

J'écris un composant Web SharePoint qui aura un formulaire ASP.NET simple. J'utilise HtmlTextWriter pour rendre les contrôles. Le problème que j'ai est que mon bouton ne semble pas déclencher le EventHandler que je lui ai assigné.asp: button Créé par programmation: EventHandler ne se déclenche pas

Je déclarai d'abord le bouton dans la méthode CreateChildControls et câblé le gestionnaire d'événements:

{ 
    Button submitButton; 
    submitButton = new Button(); 
    submitButton.Text = "Go!"; 
    submitButton.Click += new EventHandler(submitButton_Click); 
    Controls.Add(submitButton); 
} 

J'ai déclaré la fonctionnalité du « submitButton_Click » EventHandler:

void submitButton_Click(object sender, EventArgs e) 
{ 
    submitButton.Text = "Good!"; 
} 

Je rends les contrôles :

protected override void RenderContents(System.Web.UI.HtmlTextWriter output) 
{ 
     RenderChildren(output); 
} 

Enfin, je déploie la partie Web. Il apparaît bien dans le catalogue et quand je l'ajoute à une page, le contrôle apparaît. Cependant, je suppose que lorsque je clique sur le bouton, son texte devrait changer de "Go!" à "Bon!" Au lieu de cela, cela ne fait rien. Je suis assez nouveau dans toutes ces technologies - C#, Sharepoint et ASP.NET - donc je suis sûr que c'est un problème avec ma compréhension, mais en essayant différentes étapes à partir des articles sur le net et les questions précédentes ici havre de paix pas réparé mon problème. Merci d'avoir jeté un coup d'oeil.

EDIT: J'ai ouvert la page SharePoint avec la partie Web sur et le bouton a été créé comme ceci:

<input type="submit" name="ctl00$PlaceHolderMain$ctl00$ctl04" value="Go!" /> 

Il ressemble à la valeur Surclic n'a pas été ajouté du tout, ce qui est ce que je pensé ajouter l'EventHandler ferait. Est-ce que j'essaie d'ajouter OnClick d'une manière complètement fausse? Je ne comprends pas non plus pourquoi le nom du bouton ne correspond pas à ce que j'ai déclaré dans mon code.

Répondre

3

Regardez ce lien:

http://msdn.microsoft.com/en-us/library/ms452873.aspx

Vous surchargeons la méthode RenderContents de manière incorrecte, et le câblage de l'événement click au mauvais endroit.

+0

Je vois que cela fait définitivement partie de mon problème. Je suis en train de câbler l'événement click dans la méthode CreateChildControls, et je rends les contrôles comme ils l'ont décrit dans le tutoriel, en appelant RenderControls (HtmlTextWriter) dans la méthode RenderContents. Cependant, je ne reçois toujours pas de joie, ce qui me porte à croire que la logique de ma méthode submitButton_Click est le problème. Est-ce que je tente de changer la propriété de texte du bouton incorrectement? –

+0

submitButton est une propriété de votre classe? Essayez d'ajouter this.SaveProperties = True après submitButton.Text = "Good!"; – Bravax

+0

Où déployez-vous la partie Web DLL? Si c'est dans le répertoire/bin de l'application Web, vous devez recycler le pool d'applications avant que les modifications ne prennent effet. –

0

Utilisez à la place le remplacement CreateChildControls, cela est appelé au bon moment dans le pipeline de rendu de contrôle ASP.NET.

1

Vous héritez de System.Web.UI.WebControls.WebParts.WebPart ou de la WebPart SharePoint (Désolé, je ne me souviens pas de l'espace de noms). Il est recommandé d'hériter de "System.Web.UI.WebControls.WebParts.WebPart" afin qu'il soit un composant WebPart ASP.NET simple et qu'il puisse également être utilisé dans SharePoint.

Une fois que vous avez hérité de cette classe, vous devrez remplacer la méthode "Render" qui est ce que je fais toujours et ça marche bien. Je pense que votre méthode CreatechildControls est correcte. Ainsi, votre méthode Render ressemblera

protected override void Render(System.Web.UI.HtmlTextWriter output) 
{ 
     submitButton.RenderControl(write); 
} 

Vous devrez également déclarer votre bouton en dehors des « CreateChildControls » method.When écrit WebParts SharePoint, je prends toujours cette approche

  1. Hériter de System.Web .UI.WebControls.WebParts.WebPart
  2. Créez une classe partielle qui sera utilisée pour déclarer tous les contrôles utilisés par WebPart et pour remplacer les méthodes suivantes: "CreateChildControls", "OnInit" et "Render".

Espérons que cela aide.

+0

J'avais hérité de System.Web.UI.WebControls.WebParts.WebPart, mais je hérite maintenant de l'espace de noms SharePoint, car je n'avais pas accès à SaveControls lors de l'héritage de l'espace de noms System WebPart. –

0

J'ai eu un problème similaire. Le gestionnaire d'événements tirait toujours. J'ai vérifié la source d'affichage de la page SharePoint et découvert le contrôle HTML rendu était le type d'entrée = soumettre. Pour résoudre le problème, je définis le 'button.UseSubmitBehavior = false' dans le code et définissez l'ID. UseSubmitBehavior par défaut dans ASP.NET 2.0 est vrai, s'il n'est pas défini dans le code.

Questions connexes