Почему я получаю эту ссылку на объект и ответ недоступен? - PullRequest
0 голосов
/ 20 октября 2010

В этот вопрос Я обнаружил следующее, но есть две ошибки, которые я не могу решить.

Ошибка упоминается с оператором, вызывающим ее как ***//error is***.

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
}

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

Похоже, что вы хотите работать с текущей страницей (экземпляром _default) вместо создания новой.

Попробуйте передать this в вызывающую сторону и заменить obj на него.

1 голос
/ 20 октября 2010

Response принадлежит текущему HttpContext, для которого установлено свойство Response страницы, и вы не получаете правильный контекст, используя Activator.CreateInstance() Я полагаю.Если вы используете HttpContext.Current.Response.Write(a) вместо Response.Write(a), это работает:

HttpContext.Current.Response.Write(a)

Для случая с этикеткой вам потребуется:

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

Это именно то, что вы имеете в виду, я думаю.Но вам действительно нужно это делать или это просто для практики?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...