2015-09-19 1 views
0

J'ai ajouté ce récepteur d'événements (basé sur ce que j'ai trouvé here):Pourquoi ne puis-je pas appeler une méthode publique dans mon composant WebPart (contrôle utilisateur) à partir d'un récepteur d'événements?

using System; 
using System.Security.Permissions; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Security; 
using Microsoft.SharePoint.Utilities; 
using Microsoft.SharePoint.Workflow; 

namespace PostTravelWizard.PostTravelItemEventReceiver 
{ 
    /// <summary> 
    /// List Item Events 
    /// </summary> 
    public class PostTravelItemEventReceiver : SPItemEventReceiver 
    { 
     /// <summary> 
     /// An item was added. 
     /// </summary> 
     public override void ItemAdded(SPItemEventProperties properties) 
     { 
      base.ItemAdded(properties); 
      //GeneratePDF(); <= "The name 'GeneratePDF' does not exist in the current context 
     } 

     /// <summary> 
     /// The list received a context event. 
     /// </summary> 
     public override void ContextEvent(SPItemEventProperties properties) 
     { 
      base.ContextEvent(properties); 
      // TODO: What "context event" occurs here? To what event should I respond? 
     } 

    } 
} 

J'espère, lorsqu'une liste est mise à jour (du côté client/Javascript), puis récupérer ces valeurs dans le code-behind pour générer un fichier PDF. J'ai ce code dans mon fichier * .ascx.cs:

public partial class PostTravelWizardWebPartUserControl : UserControl 
{ 
    . . . 

    public void GeneratePDF(PostTravelData ptd) 
    { 
     ;//bla 
    } 

... mais il ne laisse pas le mon appel GeneratePDF() du récepteur de l'événement - il échoue avec

Le nom « GeneratePDF » ne n'existe pas dans le contexte actuel

Pourquoi? Comment puis-je rectifier cet asunto?

+1

'GeneratePDF' est une méthode d'instance de classe' PostTravelWizardWebPartUserControl'. Pour l'appeler de 'PostTravelItemEventReceiver' vous devez créer une instance de' PostTravelWizardWebPartUserControl' ou laisser la méthode être 'static' –

+0

Laissez la méthode être statique - celle du récepteur d'événements qui appelle la méthode dans le UserControl, ou la méthode dans UserControl? –

+0

Laissez la méthode 'GeneratePDF' être' static' –

Répondre

1

GeneratePDF est une méthode d'instance de PostTravelWizardWebPartUserControl classe. Pour l'appeler de PostTravelItemEventReceiver vous devez créer une instance de PostTravelWizardWebPartUserControl ou laisser la méthode (GeneratePDF) être static.

Case 1

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    base.ItemAdded(properties); 
    new PostTravelWizardWebPartUserControl().GeneratePDF(); 
} 

Case 2

public partial class PostTravelWizardWebPartUserControl : UserControl 
{ 
    public static void GeneratePDF(PostTravelData ptd) 
    { 
     ;//bla 
    } 
} 


public class PostTravelItemEventReceiver : SPItemEventReceiver 
{ 
    base.ItemAdded(properties); 
    PostTravelWizardWebPartUserControl.GeneratePDF(); 
} 
+0

Je suis allé avec Case 2; Merci. –