{"id":4487,"date":"2016-08-29T07:00:14","date_gmt":"2016-08-29T06:00:14","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=4487"},"modified":"2016-08-28T11:42:19","modified_gmt":"2016-08-28T10:42:19","slug":"displayname-attribute-funktioniert-nicht-mehr-neue-dataannotations-in-asp-net-core","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/displayname-attribute-funktioniert-nicht-mehr-neue-dataannotations-in-asp-net-core\/","title":{"rendered":"DisplayName-Attribute funktioniert nicht mehr: Neue DataAnnotations in ASP.NET Core"},"content":{"rendered":"<p>Im klassischen ASP.NET MVC Framework gibt es verschiedene DataAnnotation-Attribute f\u00fcr Models. So lassen sich beispielsweise die Anzeigenamen f\u00fcr Eigenschaften definieren. Hier verfolgt ASP.NET schon lange das DRY-Prinzip: Zum Model geh\u00f6rende Validierungsdaten und Strings sollen m\u00f6glichst auch im Model definiert werden. Dadurch stehen sie sowohl client- als auch serverseitig verf\u00fcgbar, ohne diese jeweils doppelt definieren zu m\u00fcssen.<\/p>\n<p>Um Beispielsweise den Anzeigename in einem HTML-Formular zu definieren, wurde bislang das <em>DisplayNameAttribute<\/em> verwendet. Dies zeigt folgendes, an dieser Stelle bewusst sehr minimalistisch gehaltenes Beispiel: <\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic class User {\r\n    &#x5B;DisplayName(&quot;Benutzername&quot;)]\r\n    public string UserName { get; set; }\r\n}\r\n<\/pre>\n<p>In diesem Falle w\u00fcrde uns ASP.NET ein Textfeld generieren, dessen Label die Beschriftung\u00a0<em>Benutzername<\/em> tr\u00e4gt. In ASP.NET Core ist dieses Attribute zwar noch vorhanden, funktioniert jedoch nicht mehr: Die Validierung wurde komplett \u00fcberarbeitet und verzichtet gro\u00dfteils auf die Helferklassen. Anstelle dieser kommen nun HTML-Attribute mit dem\u00a0<strong>asp-\u00a0<\/strong>Pr\u00e4fix zum Einsatz, welche die Lesbarkeit erh\u00f6hen:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;label asp-for=&quot;UserName&quot;&gt;&lt;\/label&gt;\r\n&lt;input asp-for=&quot;UserName&quot; \/&gt;\r\n<\/pre>\n<p>Diese \u00fcbernehmen jedoch nicht die Eigenschaften des alten <em>DisplayNameAttributes<\/em>. Stattdessen gibt es ein neues <em>DisplayAttribute<\/em>, welches die Eigenschaft\u00a0<em>Name<\/em> besitzt:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic class User {\r\n    &#x5B;Display(Name = &quot;Benutzername&quot;)]\r\n    public string UserName { get; set; }\r\n}\r\n<\/pre>\n<p>Damit generiert uns ASP.NET Core wieder das vollst\u00e4ndige HTML, in diesem Beispiel:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;label for=&quot;UserName&quot;&gt;Benutzername&lt;\/label&gt;\r\n&lt;input name=&quot;UserName&quot; id=&quot;UserName&quot; \/&gt;\r\n<\/pre>\n<p>Ansonsten kann nat\u00fcrlich der gewohnte Pool an Validierungs-Attributen genutzt werden, um Beispielsweise Limits oder Pflichtattribute zu nutzen: <\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic class User {\r\n    &#x5B;Required]\r\n    &#x5B;Display(Name = &quot;Vorname&quot;)]\r\n    &#x5B;MinLength(5), MaxLength(50)]\r\n    public string SureName { get; set; }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Im klassischen ASP.NET MVC Framework gibt es verschiedene DataAnnotation-Attribute f\u00fcr Models. So lassen sich beispielsweise die Anzeigenamen f\u00fcr Eigenschaften definieren. Hier verfolgt ASP.NET schon lange das DRY-Prinzip: Zum Model geh\u00f6rende Validierungsdaten und Strings sollen m\u00f6glichst auch im Model definiert werden. Dadurch stehen sie sowohl client- als auch serverseitig verf\u00fcgbar, ohne diese jeweils doppelt definieren zu &#8230;<\/p>\n","protected":false},"author":5,"featured_media":4495,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[336,522,537],"class_list":["post-4487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-softwareentwicklung","tag-asp-net","tag-asp-net-core","tag-asp-net-core-1-0"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=4487"}],"version-history":[{"count":7,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4487\/revisions"}],"predecessor-version":[{"id":4494,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4487\/revisions\/4494"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/4495"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=4487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=4487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=4487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}