Hier meine Entwicklung Voraussetzung ist,Abrufen von Modellnamen in benutzerdefinierten Anzeigenamen Attribut
My Label-Werte werden in der Datenbank gespeichert sind, und ich möchte noch die Daten Anmerkung in einer deklarativen Weise verwenden, ist dies mein Modell zu machen lesbarer.
Und hier ist mein Ansatz,
entschied ich mich individuellen Displaynamen zu schreiben, wo der Standardwert von meinem Modell zur Verfügung gestellt wird durch den aus der Datenbank abgerufen Wert überschreibt.
Hier wird die Eigenschaft im Modell definiert ist,
[CustomDisplay(Name: "First Name")]
[CustomRequired(ErrorMessage: "{0} is required")]
public String FirstName { get; set; }
Hier wird der Name Attributklasse benutzerdefinierte Anzeige ist,
public class CustomDisplayAttribute : DisplayNameAttribute
{
private string _defaultName;
private string _displayName;
public CustomDisplayAttribute(string Name)
{
_defaultName = Name;
}
public override string DisplayName
{
get
{
if (String.IsNullOrEmpty(_displayName))
{
_displayName = DAO.RetrieveValue(**ModelName**, _defaultName);
}
return _displayName;
}
}
}
Nun Sie im obigen Code sehen können, ist Modelname etwas, das ich brauche, aber ich habe nicht !!
Beim Debuggen, ich grabe in ModelMetadataProviders.Current und kann die Verfügbarkeit des aktuellen Modells in Aktion sehen. Da es sich jedoch um nicht öffentliche statische Mitglieder handelt, kann ich nicht über meinen Code darauf zugreifen.
ich die unten Methode geschrieben haben, den Modellnamen durch Reflektion abzurufen,
private static string GetModelName()
{
var modelName = String.Empty;
FieldInfo info = typeof(CachedAssociatedMetadataProvider<CachedDataAnnotationsModelMetadata>)
.GetField("_typeIds", BindingFlags.NonPublic | BindingFlags.Static);
var types = (ConcurrentDictionary<Type, string>)info.GetValue(null);
modelName = types.FirstOrDefault().Key.Name;
return modelName;
}
Aber das Problem ist, stellt die Typen Sammlung mir Einträge für alle Modelle (mindestens einmal besucht vom Benutzer). Und es gibt keinen Hinweis darauf, was gerade in Aktion ist !!