Dies war eine alte Frage, aber vorhandene Antworten ignorieren das ernsthafte Problem, benutzerdefinierte Attribute wegzuwerfen, wenn Sie das Modell neu generieren. Ich füge eine detailliertere Antwort hinzu, um die derzeit verfügbaren Optionen abzudecken.
Sie haben 3 Möglichkeiten:
- Füge hinzu ein
[DisplayName("Name goes here")]
der Datenmodellklasse Attribut hinzu. Der Nachteil ist, dass dies weggeworfen wird, wenn Sie die Datenmodelle neu generieren.
- Fügen Sie Ihrem einen String-Parameter hinzu
Html.LabelFor
. zB @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Referenz: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Der Nachteil dabei ist, dass Sie das Etikett wiederholen müssen in jeder Sicht.
- Dritte Option. Verwenden Sie eine Metadatenklasse, die an die Datenklasse angehängt ist (Details folgen).
Option 3 - Hinzufügen einer Metadatenklasse:
Microsoft ermöglicht das Dekorieren von Eigenschaften für eine Entity Framework-Klasse, ohne die vorhandene Klasse zu ändern ! Dies durch Metadatenklassen, die an Ihre Datenbankklassen angehängt werden (effektiv eine seitliche Erweiterung Ihrer EF-Klasse). Auf diese Weise können Attribute der zugeordneten Klasse und nicht der Klasse selbst hinzugefügt werden , sodass die Änderungen nicht verloren gehen, wenn Sie die Datenmodelle neu generieren .
Wenn sich Ihre Datenklasse beispielsweise MyModel
in einer SomekingStatus
Eigenschaft befindet, können Sie dies folgendermaßen tun:
Deklarieren Sie zunächst eine Teilklasse mit demselben Namen (und unter Verwendung desselben Namespace), mit der Sie ein Klassenattribut hinzufügen können, ohne überschrieben zu werden:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Alle generierten Datenmodellklassen sind Teilklassen, mit denen Sie zusätzliche Eigenschaften und Methoden hinzufügen können, indem Sie einfach mehr Klassen mit demselben Namen erstellen (dies ist sehr praktisch und ich verwende es häufig, z. B. um formatierte Zeichenfolgenversionen anderer Feldtypen im Modell bereitzustellen ).
Schritt 2: Fügen Sie eine Metatadatenklasse hinzu, auf die Ihre neue Teilklasse verweist:
public class MyModelMetaData
{
// Apply DisplayNameAttribute (or any other attributes)
[DisplayName("My New Label")]
public string SomekingStatus;
}
Referenz: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Anmerkungen:
- Wenn Sie aus dem Speicher heraus eine Metadatenklasse verwenden, werden möglicherweise vorhandene Attribute der tatsächlichen Klasse (
[required]
usw.) ignoriert, sodass Sie möglicherweise die Attribute in der Metadatenklasse duplizieren müssen.
- Dies funktioniert nicht durch Magie und funktioniert nicht nur mit Klassen. Der Code, der nach UI-Dekorationsattributen sucht, sucht zuerst nach einer Metadatenklasse.