Отражение GetFields не может получить значение из asp.net, но консоль - PullRequest
0 голосов
/ 15 мая 2011

Вот мой фрагмент кода

Консольное приложение (работает нормально)

class Program
{
    private string Val;

    static void Main(string[] args)
    {
        Program p = new Program();
        p.Test();
    }

    private void Test()
    {
        var t = GetType();

        const BindingFlags flag = BindingFlags.DeclaredOnly | 
            BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

        foreach (var fieldInfo in t.GetFields(flag))
        {
            Console.WriteLine(fieldInfo.Name);
        }
    }
}

Веб-приложение (не работает)

public class BasePage:Page
{
    protected override void OnLoad(EventArgs e)
    {
        var t = GetType();

        const BindingFlags flag = BindingFlags.DeclaredOnly | 
            BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

        foreach (FieldInfo item in t.GetFields(flag))
        {
            System.Diagnostics.Debug.Write(item.Name);
        }

        base.OnLoad(e);
    }  
}

Тестовый код

public partial class _Default : BasePage
{
    private string ABC;
    public string Good { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

1 Ответ

1 голос
/ 15 мая 2011

GetType не будет возвращать класс _Default, но класс, сгенерированный ASP.net, который наследует _Default.попробуйте GetType().BaseType или typeof(_Default).

Edit:

Также сделайте _Default наследованным от BasePage вместо Page или от всей логики отраженияне будет даже включены в _Default

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