Как преобразовать текущее имя класса пользовательских элементов управления asp.net в строку на С#?
-
18-09-2019 - |
Вопрос
Итак, я попробовал 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, а имя файла.