2010-10-20 9 views
0

Dans this question J'ai trouvé ce qui suit, mais il y a deux erreurs que je ne peux pas résoudre. L'erreur est mentionnée avec l'instruction provoquant .Pourquoi est-ce que j'obtiens cette erreur Object Reference and Response not Available?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Reflection; 
//using System.Collections; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string function_name; 
     function_name = "one"; 
     caller(function_name); 
    } 

    static void caller(String function_name) 
    { 
     // Get a type from the string 
     Type type = typeof(_Default); 
     // Create an instance of that type 
     Object obj = Activator.CreateInstance(type); 
     // Retrieve the method you are looking for 
     MethodInfo methodInfo = type.GetMethod(function_name); 
     // Invoke the method on the instance we created above 
     methodInfo.Invoke(obj, null); 
    } 

    public void one() //function 
    { 
     string a = "\n this is the alphabet a \n"; 

     ***//error is*** 
     ////Object reference not set to an instance of an object. 
     ////Label1.Text = "one i called"; 

     ***//error is*** 
     /////Response is not available in this context. 
     //// Response.Write(a); 
    }// function one ends 
} 

Répondre

3

Il semble que vous souhaitiez travailler avec la page en cours (instance d'un défaut) au lieu d'en créer un nouveau.

Essayez de passer this dans l'appelant, et de remplacer obj avec lui.

+0

c'est votre solution –

+0

J'ai essayé ce que vous avez dit, mais le "ceci" ne rentre pas dans le cadre de la fonction, seriez-vous plus précis quant à l'endroit où l'ajouter? – user287745

+0

et pourquoi je transmettrais cela à l'appelant, l'appelant a le nom de la méthode. cela n'a rien à voir avec l'obj. Je ne comprends pas .. – user287745

1

Response appartient à la HttpContext actuelle qui est définie sur Response propriété de la page et vous ne recevez pas le bon contexte à l'aide Activator.CreateInstance() je suppose. Si vous utilisez HttpContext.Current.Response.Write(a) au lieu de Response.Write(a), cela fonctionne:

HttpContext.Current.Response.Write(a) 

Pour le cas de l'étiquette, vous avez besoin:

Label lbl = (HttpContext.Current.Handler as Page).FindControl("Label1") as Label; 
lbl.Text = "one i called"; 

Ce fait exactement ce que vous voulez dire que je suppose. Mais avez-vous vraiment besoin de le faire, ou est-ce juste pour la pratique.

+0

okay mais qu'en est-il de l'étiquette? et d'autres fonctions – user287745

+0

J'ai ajouté le cas d'étiquette maintenant. –

+0

merci, votre méthode est grande pour comprendre comment accéder aux choses sur la même page indirectement +1 – user287745