2009-06-25 6 views
0

Je souhaite qu'un service Web charge un contrôle .ascx, y charge des valeurs, puis renvoie le contenu HTML de ce contrôle. J'ai quelque chose comme ça:ASP.NET LoadControl L'utilisation du mot clé 'base' n'est pas valide dans ce contexte

[WebMethod(EnableSession = true)] 
public void GetHTML() 
{ 
    UserControl loader = new UserControl(); 
    MyCustomReport reportControl = 
     (MyCustomReport)loader.LoadControl("~/The/path/to/the/.ascx"); 
    reportControl.DataBind(); 

    return "TODO"; 
} 

MyCustomReport remplace DataBind():

public override void DataBind() 
{ 
    base.DataBind(); 

    // etc. 
} 

La ligne base.DataBind() jette un NullReferenceException et le débogueur dit:

utilisation du mot-clé 'base' est pas valide dans ce contexte

Toute aide sera appréciée, merci!

Répondre

1

Essayez ceci:

public override void OnDataBinding() 
{ 
    base.OnDataBinding(); 

    // other stuff here ... 
} 

UserControl n'a pas une méthode DataBind virtuelle, mais il a une méthode OnDataBinding virtuelle. Je crois que c'est la méthode que vous voulez remplacer.

+0

10x Andrew, de cette façon, il ne plante pas à base.OnDataBinding(); Cependant, je pense que cela change la signification du code. MyCustomReport a des sous-contrôles, avec un override similaire - avant, le base.DataBind(); conduit à leur liaison de données, maintenant leurs OnDataBinding() ne sont pas appelés. Le même contrôle fonctionne, lorsqu'il est placé directement dans un fichier .aspx, le problème semble être la façon dont je le charge dans le service Web, mais je ne peux pas savoir exactement ce qui ne va pas. – user128873

Questions connexes