﻿
{"id":1303,"date":"2013-01-24T22:17:15","date_gmt":"2013-01-24T22:17:15","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1303"},"modified":"2013-01-24T22:17:15","modified_gmt":"2013-01-24T22:17:15","slug":"mvc-emailadress-attributeu-yazmak","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvc-emailadress-attributeu-yazmak\/","title":{"rendered":"MVC EmailAdress Attribute&#8217;u Yazmak"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Web projelerinde, kullan\u0131c\u0131lardan genellikle formlar \u00fczerinden bilgi transferi yapar\u0131z.Al\u0131nan bilgilerin yap\u0131lar\u0131 veritabanlar\u0131na bellirli format yap\u0131lar\u0131nda kay\u0131t ettiririz.\u00d6rne\u011fin tarihsel veri giri\u015flerini (99\/99\/9999) tipindeki bir format yap\u0131s\u0131nda al\u0131r\u0131z.Tabi bu format yap\u0131s\u0131n\u0131 Asp.NET, Asp.NET MVC ya da herhangi bir platformun destekledi\u011fi Validation kontrolleriyle ya da kendi elimizle yazarak Jquery, Javascript deste\u011fiyle alabiliriz.Bizim konumuz MVC projeleri \u00fczerinde, kullan\u0131c\u0131dan form tabanl\u0131 gelen bilgi transferi neticesinde al\u0131nan e-mail adreslerinin istedi\u011fimiz formatta yaz\u0131l\u0131m\u0131n\u0131 sa\u011flamak.Bunun i\u00e7in kendimiz \u00f6zel bir Attribute olu\u015fturaca\u011f\u0131z.<br \/>\n<!--more--><br \/>\nKonu \u00fczerinde \u00f6rne\u011fimizi te\u015fkillendirebilmek i\u00e7in \u00f6nceden haz\u0131rlanm\u0131\u015f bir MVC projesi i\u00e7inde \u00e7al\u0131\u015faca\u011f\u0131z.Bu konular\u0131 ba\u015ftan almam hem zaman kayb\u0131, hemde konunun \u00f6z\u00fcnden da\u011f\u0131lmas\u0131na sebep olacakt\u0131r.E\u011fer g\u00f6z ard\u0131 edilen bu konular hakk\u0131nda bilgi sahibi de\u011filseniz, derhal bu yaz\u0131y\u0131 b\u0131rak\u0131p \u00f6nceki MVC i\u00e7erikli yaz\u0131lar\u0131m\u0131 okuman\u0131z\u0131 tavsiye ediyorum.(ya da ba\u015fka kaynaklardan MVC temellerini \u00f6\u011freniniz)<\/p>\n<p>Elimizdeki MVC projesinde, Model katman\u0131nda \u00f6nceden haz\u0131rlanm\u0131\u015f bir LINQ To SQL ile olu\u015fturulmu\u015f .dbml uzant\u0131l\u0131 dosyam\u0131z ve Controller&#8217;\u0131m\u0131z haz\u0131r oldu\u011funu d\u00fc\u015f\u00fcnelim.Dbml dosyam\u0131zda ba\u011flant\u0131 kurulan veritaban\u0131nda bulunan &#8220;Email&#8221; ad\u0131nda bir tablomuz mevcut olacakt\u0131r ve bu tablo i\u00e7inde sadece &#8220;Email&#8221; ad\u0131nda bir kolonumuz olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle &#8220;Email&#8221; isimli kolonumuza bir Validation i\u015flemi yapabilmek i\u00e7in &#8220;partial&#8221; bir s\u0131n\u0131f tan\u0131mlayal\u0131m ve &#8220;Bind&#8221; i\u015flemlerini yapal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System.Web.Mvc;\r\nusing System.ComponentModel.DataAnnotations;\r\nusing System.ComponentModel;\r\nnamespace EmailAdressCalismasi.Models\r\n{\r\n    &#x5B;Bind(Include = &quot;Email&quot;)]\r\n    &#x5B;MetadataType(typeof(Email_Kontrol))]\r\n    public partial class Email\r\n    {\r\n    }\r\n    class Email_Kontrol\r\n    {\r\n        &#x5B;DisplayName(&quot;E-Posta Adresiniz :&quot;)]\r\n        public string Email { get; set; }\r\n    }\r\n}\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;Email&#8221; tablosundaki &#8220;Email&#8221; isimli kolonu &#8220;Bind&#8221; edip &#8220;MetadataType&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcyle &#8220;Email_Kontrol&#8221; isimli s\u0131n\u0131fta Validation kontrolleri yapaca\u011f\u0131m\u0131z\u0131 s\u00f6yledik.<\/p>\n<p>&#8220;Email_Kontrol&#8221; s\u0131n\u0131f\u0131nda string tipinde &#8220;Email&#8221; ad\u0131nda propertymiz, &#8220;Email&#8221; isimli kolonu temsil ediyor.Bu kolonun View katman\u0131nda g\u00f6z\u00fckecek ad\u0131n\u0131 &#8220;DisplayName&#8221; Attribute&#8217;uyla girmi\u015f bulunmaktay\u0131z.View katman\u0131nda girilecek de\u011ferin E-Mail format\u0131nda olup olmad\u0131\u011f\u0131n\u0131 kontrol edecek Attribute&#8217;u da olu\u015fturup propertyimizi i\u015faretleyece\u011fiz.<\/p>\n<p>\u015eimdi &#8220;EmailAdressAttribute&#8221; ismini verece\u011fimiz\u00a0Attribute&#8217;umuzu olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]\r\n    \/\/Bu Attribute'un \u00fczerinde kullan\u0131laca\u011f\u0131 yap\u0131lar\u0131 ayarl\u0131yorum.\r\n    \/\/Field ve Property yap\u0131lar\u0131nda kullan\u0131lacakt\u0131r.\r\n    public class EmailAdressAttribute : DataTypeAttribute\r\n    {\r\n        readonly Regex regex = new Regex(@&quot;\\w+(&#x5B;-+.']\\w+)*@\\w+(&#x5B;-.]w+)*\\.\\w+(&#x5B;-.]\\w+)*&quot;, RegexOptions.Compiled);\r\n        public EmailAdressAttribute()\r\n            : base(DataType.EmailAddress)\r\n        {\r\n            \/*\r\n             Kal\u0131t\u0131m ald\u0131\u011f\u0131m\u0131z DataTypeAttribute s\u0131n\u0131f\u0131na ula\u015f\u0131p, veri tipi\r\n             kontrol\u00fcn\u00fcn E-Mail adresi olaca\u011f\u0131n\u0131 s\u00f6yl\u00fcyoruz.\r\n             *\/\r\n        }\r\n        public override bool IsValid(object value)\r\n        {\r\n            string str = Convert.ToString(value,CultureInfo.CurrentCulture);\r\n            if (string.IsNullOrEmpty(str))\r\n            {\r\n                return true;\r\n            }\r\n            Match match = regex.Match(str);\r\n            return (match.Success &amp;&amp; (match.Length == 0)) &amp;&amp; (match.Length == str.Length);\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet Attribute&#8217;umuzu yazm\u0131\u015f olduk.\u015eimdi &#8220;partial&#8221; olarak olu\u015fturdu\u011fumuz &#8220;Email&#8221; s\u0131n\u0131f\u0131nda bu Attribute&#8217;u kullanal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-emailadress-attributeu-yazmak.html\/email\" rel=\"attachment wp-att-1304\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1304\" alt=\"Email\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Email.png\" width=\"523\" height=\"101\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Email.png 523w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/Email-300x57.png 300w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, &#8220;EmailAdressAttribute&#8221; ismindeki Attribute&#8217;umuz &#8220;EmailAdress&#8221; olarak eklendi.Ve hatta &#8220;ErrorMessage&#8221; gibi hata parametrelerini de otomatik olarak alg\u0131l\u0131yor.Bunun sebebi, bu Attribute&#8217;umuz &#8220;DataTypeAttribute&#8221; isimli metodtan Inherit(kal\u0131t\u0131m) edildi\u011fi i\u00e7in, ve Constructor metodunda veri tipi E-Mail yap\u0131s\u0131 se\u00e7ildi\u011fi i\u00e7in gerekli parametrelerini getirtiyor.Halla g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, \u00e7oklu dil deste\u011finde kulland\u0131\u011f\u0131m\u0131z &#8220;ResourceName&#8221; ve &#8220;ResourceType&#8221; parametrelerini bile getiriyor.<\/p>\n<p>Yukar\u0131daki resimde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz kodlar\u0131 a\u015fa\u011f\u0131ya yaz\u0131l\u0131 \u015fekilde almakta fayda var.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Bind(Include = &quot;Email&quot;)]\r\n    &#x5B;MetadataType(typeof(Email_Kontrol))]\r\n    public partial class Email\r\n    {\r\n    }\r\n    class Email_Kontrol\r\n    {\r\n        &#x5B;EmailAdress(ErrorMessage=&quot;L\u00fctfen uygun formatta E-Mail adresi giriniz.&quot;)]\r\n        &#x5B;DisplayName(&quot;E-Posta Adresiniz :&quot;)]\r\n        public string Email { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi projemizi \u00e7al\u0131\u015ft\u0131ral\u0131m ve uygun formatta olmayan bir E-Mail adresi yazal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-emailadress-attributeu-yazmak.html\/sondurum\" rel=\"attachment wp-att-1305\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/SonDurum.png\" alt=\"SonDurum\" width=\"487\" height=\"89\" class=\"aligncenter size-full wp-image-1305\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/SonDurum.png 487w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/SonDurum-300x54.png 300w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Attribute&#8217;umuz sorunsuz \u00e7al\u0131\u015fmaktad\u0131r.<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Web projelerinde, kullan\u0131c\u0131lardan genellikle formlar \u00fczerinden bilgi transferi yapar\u0131z.Al\u0131nan bilgilerin yap\u0131lar\u0131 veritabanlar\u0131na bellirli format yap\u0131lar\u0131nda kay\u0131t ettiririz.\u00d6rne\u011fin tarihsel veri giri\u015flerini (99\/99\/9999) tipindeki bir format yap\u0131s\u0131nda al\u0131r\u0131z.Tabi bu format yap\u0131s\u0131n\u0131 Asp.NET, Asp.NET MVC ya da&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[746,313,337,283],"class_list":["post-1303","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-attribute","tag-emailadress","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1303"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1303\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}