Как преобразовать текущее имя класса пользовательских элементов управления asp.net в строку на С#?

StackOverflow https://stackoverflow.com/questions/1881333

Вопрос

Итак, я попробовал GetType(), но по какой-то причине он включает пространство имен...
Нет ли в C# свойства класса, указывающего его имя?
Например:

public class Parent : System.Web.UI.UserControl {
    public someFunction(){
        Child child = new Child();
        Console.WriteLine(child.ThePropertyThatContainsTheName);
    }
}

public class Child : Parent {
}

Я попытался создать Child со строковым свойством, имя которого жестко закодировано, но только если мы сможем найти лучший обходной путь для этой проблемы...возможно отражение или выражения...

Заранее спасибо =)

Редактировать:Кстати, я работаю над пользовательскими элементами управления...

Это было полезно?

Решение

Если вы используете проект веб-приложения ASP.NET, вы обычно будете использовать модель выделенного кода.

ASP.NET будет динамически генерировать и компилировать класс из вашего файла aspx/ascx, который использует класс, который вы определили в файле кода программной части, в качестве базового класса.

this.GetType().Name и this.GetType().FullName вернет имя автоматически созданного класса, созданного ASP.NET.Этот автоматически созданный класс будет подклассом класса UserControl/WebPage, который вы определили в файле кода программной части (Inherits ключевое слово в <%@Control ...> тег вашего ascx-файла / <%@Page ...> тег вашего файла aspx).

Если вам нужно имя вашего класса кода программной части, используйте:

this.GetType().BaseType.Name или this.GetType().BaseType.FullName

Другие советы

Использовать Type.Name так:

using System;

class Test
{
    static void Main()
    {
        Console.WriteLine(typeof(Test).Name);
    }
}

или вот так (если вы получаете тип через Object.GetType):

using System;

class Foo { }

class Test
{
    static void Main()
    {
        Foo foo = new Foo();
        Console.WriteLine(foo.GetType().Name);
    }
}

Использовать GetType() и Name

Console.Writeline(child.GetType().Name);

или

Console.Writeline(child.GetType().FullName);

Или вы можете использовать отражение, чтобы получить базовый тип вашей переменной.

control.GetType().BaseType.Name

Если вам нужно, я могу подробно описать, почему это так.

Если хотите, можете попробовать этот код

System.IO.Path.GetFileNameWithoutExtension(((UserControl)control).AppRelativeVirtualPath)

Это даст вам нужное имя, но это не тип UserControl, а имя файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top