Open KevserAkbas opened 3 years ago
Gönderilen verilerin aslında modelin beklediği şey olduğundan emin olduğumuz modelin VALIDATION'ini gerçekleştirmemiz gerekecek.
Ve eğer durum bu değilse, o zaman anlamlı hata mesajları sağlamamız gerekir.
Aşağıdaki akışa buradan bir göz atın.
Ekleme eyleminin bir siparişi kabul etmesini sağlayabiliriz;
ancak bu sefer kullanıcı toplam değer olarak Hello World dizesini sağladı.
Kullanıcıların siparişin toplamını girmesinin normal olmadığını biliyorum, ancak buradaki asıl sorun bu değil.
Toplam özellik için geçersiz veriler alıyoruz.
ASP.NET Core MVC'nin model bağlama motoru, model bağlayıcılar tarafından sağlanan değerlerin model nesnesinin gereksinimlerini karşılayıp karşılamadığını görmek için bir kontrol gerçekleştirebilir.
Ve bunu, eylem yönteminde ModelState.IsValid'e açık bir çağrı kullanarak yapabiliriz.
Bir model durumu, gerçekten model bağlamanın bir yan ürünüdür ve model bağlamanın gerçekte nasıl gittiğine dair verileri içerecektir.
ModelState.IsValid özelliği, model nesnesinde VALIDATION hatası yoksa true, VALIDATION hatası varsa tabii ki false döndürür.
Sadece model geçerli olduğunda bu durumda siparişi veri tabanına kaydedeceğiz ve ardından kullanıcıyı yeniden yönlendireceğiz.
Bu durumda, kullanıcıyı Ödeme tamamlandı sayfasına yönlendireceğiz.
Ancak ModelState.isValid özelliği false döndürürse, bu durumda aynı görünüme dönüyoruz.
Bu durumda, VALIDATION ile ilgili bir sorun vardır ve bu nedenle varsayılan görünüm kullanıcıya döndürülür ve bir kullanıcı hataları düzeltmeyi deneyebilir.
Model VALIDATION, ModelState.IsValid özelliği kullanılarak tek seferde tüm model örneğinde yapılabilir.
Bu, model geçerliyse temelde doğru, değilse yanlış döndürür. Ayrıca ModelState üzerinde, tek bir özelliği kabul eden GetValidationState yöntemine sahibiz.
Bu şekilde, geçerli olup olmadığını görmek için bir özelliği inceleyebiliriz.
Son olarak, AddModelError yöntemine de sahibiz.
Herhangi bir manuel VALIDATION kuralı uyguluyorsak, gerektiğinde manuel olarak model hataları da ekleyebiliriz.
Bu yöntem bunun için kullanılabilir.
Varsayılan olarak, model bağlamanın kutudan çıkardığı VALIDATION oldukça basittir.
Tipik olarak, alan sınıflarımıza daha fazla VALIDATION kuralı eklemek isteriz.
Bunun için, model sınıflarımızın özelliklerine ekleyebileceğimiz nitelikler biçiminde meta verileri kullanabiliriz.
Bu öznitelikler, VALIDATION kurallarımızı doğrudan model özelliklerinde belirlememize izin verir.
Normal ifadeler, Required vb. Dahil olmak üzere ASP.NET Core MVC'ye oldukça az sayıda VALIDATION özelliği yerleştirilmiştir.
Özel öznitelikler oluşturmak ve bunları özelliklere uygulamak da mümkündür.
Yine de bu kursta bunu yapmayacağız.
ASP.NET Core MVC'de yerleşik olarak bulunan en önemli VALIDATION özniteliklerine genel bir bakış burada.
Required özniteliğin eklenmesi, değer sağlanmazsa bir hataya neden olur.
Dolayısıyla, örneğin e-postanın Required olduğu bir form talep ederseniz, bu özelliği e-posta özelliğine ekleyeceğiz.
StringLength niteliği, değer için izin verilen minimum ve maksimum sayıda karakter belirtmemize olanak tanır.
Sağlanan bir alanın uzunluğunun veritabanının saklayabileceğinden daha uzun olmadığından emin olmak istiyorsanız, bunu kullanabiliriz.
Range özniteliği, sayısal bir değerin bir aralık içinde olduğundan emin olmak için kullanılabilir.
RegularExpression özniteliği aracılığıyla, özelliğin değeriyle eşleştirilmesi gereken bir normal ifade belirtebiliriz.
Eşleşme yoksa, bir hata ortaya çıkar.
DataType özniteliği, bu gerçekten herhangi bir VALIDATION yapmaz, ancak bazı tarayıcılar tarafından telefon, e-posta veya URL girişi gibi giriş alanlarını farklı şekilde biçimlendirmek için kullanılacaktır.
Bu kod parçacığında, FirstName özelliği için Required ve StringLength niteliklerini kullandığımı görebilirsiniz.
Required öznitelik kullanıldığında ve model bağlama gerçekleştirilirken hiçbir değer sağlanmadığında, VALIDATION başarısız olur.
Benzer şekilde, StringLength özniteliğini kullandığımızda ve kullanıcı belirtilenden daha uzun bir karakter uzunluğuna sahip bir değer girdiğinde, VALIDATION de başarısız olacaktır.
Artık bu öznitelikleri kullanarak özel hata mesajlarını etkili bir şekilde belirleyebileceğimizi gördük.
Artık bu hata mesajları ve yerleşik hata mesajları bir VALIDATION özetinde görüntülenebilir.
Bu VALIDATION özeti yine bir etiket yardımcısıdır.
Bu durumda, VALIDATION özet etiketi yardımcısı olarak adlandırılan etiket yardımcısının arkasında oturan sınıf, bir div üzerindeki asp-validation-summary özniteliğini arayacaktır.
Model bağlama gerçekleştiğinde bulunan tüm hatalar VALIDATION özetinde gösterilecektir.
Burada, bir div üzerine yerleştirilen asp-validation-summary özniteliğini, tüm bu durumda belirtilen değer olarak görebilirsiniz; bu, form içinde meydana gelen tüm VALIDATION hatalarını oldukça mantıklı bir şekilde görüntüler.
Form Tag Helpers
• ASP.NET Core MVC, formlarla çalışmamızı sağlayan bir dizi yerleşik etiket yardımcısı ile birlikte gelir
• Form tag helper formlar oluşturmamıza izin verecek,
• Input tag helper elbette giriş etiketini oluşturmak için kullanılacaktır.
• Ayrıca ASP.NET'ten bir Label Tag Helper,
bir Textarea Tag Helper ve
bir Select Tag Helper alıyoruz.
• Formlarda doğrulama ile ilgili bir dizi Validation Tag Helper da vardır.
• Kullanımı, model nesnemizdeki bir özellik için bir etiket oluşturmaktır.
• Hangi özellik ile çalışması gerektiğini belirtmek için, görüntülemek istediğimiz özelliğin adını değer olarak alacağımız asp-for özniteliğini kullanacağız.
• Razor görünümümüzde bu koda sahip olduğumuzda, bu aşağıdaki HTML'nin oluşturulmasıyla sonuçlanacaktır.
• Oluşturulan özniteliğin değeri, ona verdiğimiz özelliğin adıyla eşleşir.
• Label ın içeriği özelliğin adını (name) gösterir.
• Ayrıca, görüntülenen değeri değiştirmek için modelimizin özelliklerine nitelikler ekleyebiliriz,
böylece görüntülenecek değer daha okunabilir olur.
• Burada görebileceğiniz gibi,
örneğin stil nitelikleri veya sınıf gibi başka nitelikler olsaydı, bu, burada gördüğünüz gibi oluşturulan HTML'ye eklenir.![image](https://user-images.githubusercontent.com/45363875/118876056-7be47480-b8f5-11eb-9bdc-117b9167d321.png)
• IntelliSense, etiket yardımcılarıyla çalışırken de çalışır.
• Elbette, yalnızca güçlü bir şekilde yazılmış bir görünüm oluşturduğumuzda,
yani Visual Studio hangi türe bağladığımızı bilir.
• Etiket yardımcıları yalnızca normal bir öğe olarak görünmez,
bazı etiket yardımcıları diğer etiket yardımcılarında kullandığımız özniteliklerdir ve
gezinmeye baktığımızda bunlardan epeyce bir kısmını gördük.
• Bunlar, form etiketinde kullanabileceğimiz bazı etiket yardımcılarıdır.
• Asp-controller, bir formun post eylemi tarafından hangi denetleyicinin hedeflenmesi gerektiğini belirtmek için bir form etiketi yardımcısında kullanılabilir.
• Benzer şekilde, asp-action etiketi yardımcısı, hedeflemek istediğimiz denetleyicideki eylemi belirlememize olanak tanır.
• Bir rota oluşturabileceğimizi zaten gördünüz, ancak ekstra parametreler gerekiyor.
• Bunu kapsamak için, asp-route'a ve ardından yıldız işaretinin, bir değer belirtmek istediğimiz parametrenin adıyla değiştirilebileceği yıldız işaretine sahibiz.
• Ayrıca, kullanmak istediğimiz ana yolu belirtmemize olanak tanıyan asp-route etiketi yardımcısı da var.
• Ve şimdi, gizli bir alan isteği doğrulama belirteci oluşturarak sitemizdeki siteler arası istek sahteciliği saldırılarına karşı koymamızı sağlayan asp-antiforgery etiket yardımcısına sahibiz.
• Burada, bazı ekstra etiket yardımcılarının iş başında olduğu form etiketi yardımcısının bir örneğini görebilirsiniz.![image](https://user-images.githubusercontent.com/45363875/118876443-ed242780-b8f5-11eb-937c-df280a87daf5.png)
• Asp eylemi belirtildi, bu durumda başka bir denetleyici belirtilmediğinden, bu durumda geçerli denetleyicide Kullanıma Alma eylemini tetikleyecektir.
• Bir gönderi yaptığımızda, diyelim ki bu form ile gönderiyoruz.