Wie der aktuellen Klassennamen von asp.net usercontrols bespannen auf c # konvertieren?
-
18-09-2019 - |
Frage
So habe ich versucht, GetType (), aber aus irgendeinem Grund, es enthält den Namespace ...
Wie funktionieren C # nicht eine Eigenschaft für eine Klasse hat ihren Namen anzugeben?
Zum Beispiel:
public class Parent : System.Web.UI.UserControl {
public someFunction(){
Child child = new Child();
Console.WriteLine(child.ThePropertyThatContainsTheName);
}
}
public class Child : Parent {
}
Ich habe versucht, das Kind mit einer String-Eigenschaft zu erstellen, die den Namen hat hartcodiert, aber nur, wenn wir eine bessere Abhilfe dazu finden könnten ... vielleicht Reflexion oder Ausdrücke ...
Vielen Dank im Voraus =)
Edit: Ich arbeite an Benutzern Kontrollen durch die Art und Weise ...
Lösung
Wenn Sie ein ASP.NET Web Application Projekt verwenden, werden Sie in der Regel des Code-Behind-Modell werden.
ASP.NET dynamisch erzeugen und eine Klasse von Ihrer aspx / ascx Datei kompilieren, die die Klasse verwendet man als Basisklasse in der Code-Behind-Datei definiert ist.
this.GetType().Name
und this.GetType().FullName
wird den Namen der automatisch generierte Klasse von ASP.NET generiert zurückzukehren. Diese automatisch generierte Klasse wird die Usercontrol / WebPage Klasse Unterklasse Sie in Ihrem Code-Behind-Datei (Inherits
Schlüsselwort in der <%@Control ...>
-Tag Ihrer ascx Datei / <%@Page ...>
-Tag Ihrer aspx-Datei) definiert haben.
Wenn Sie den Namen Ihrer Code-Behind-Klasse wollen, verwenden Sie:
this.GetType().BaseType.Name
oder this.GetType().BaseType.FullName
Andere Tipps
Verwenden Type.Name
wie folgt aus:
using System;
class Test
{
static void Main()
{
Console.WriteLine(typeof(Test).Name);
}
}
oder so (wenn Sie den Typen über Object.GetType
erhalten):
using System;
class Foo { }
class Test
{
static void Main()
{
Foo foo = new Foo();
Console.WriteLine(foo.GetType().Name);
}
}
Mit GetType()
und Name
Console.Writeline(child.GetType().Name);
oder
Console.Writeline(child.GetType().FullName);
Oder Sie können Reflektion verwenden Basistyp Ihrer Variablen zu bekommen
control.GetType().BaseType.Name
Wenn Sie mir tief Beschreibung zur Verfügung stellen kann, warum es so ist.
Wenn Sie möchten, können Sie diesen Code versuchen
System.IO.Path.GetFileNameWithoutExtension(((UserControl)control).AppRelativeVirtualPath)
Dies gibt Ihnen den Namen, den Sie wollen, aber das ist nicht die Art des Benutzersteuerelements, aber es ist Dateinamen.