Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Pengesahan Bersyarat dalam ASP.NET MVC?
Melaksanakan pengesahan bersyarat dalam ASP.NET MVC
Anotasi data dalam ASP.NET MVC menyediakan cara yang mudah untuk melaksanakan pengesahan pada sifat model. Walau bagaimanapun, kadangkala anda mungkin perlu melaksanakan peraturan pengesahan bersyarat di mana kesahihan medan bergantung pada nilai medan lain.
Contoh: Medan yang diperlukan bersyarat
Pertimbangkan senario berikut: Kami mempunyai model "Orang" yang mengandungi sifat "IsSenior" dan sifat "Senior" yang mengandungi perihalan. Kami mahu sifat "Senior.Description" menjadi medan yang diperlukan hanya jika "IsSenior" ditetapkan kepada benar.
Kaedah anotasi data
Ini tidak boleh dilakukan hanya menggunakan anotasi data. Kod berikut menunjukkan had ini:
<code class="language-csharp">public class Person { [Required(ErrorMessage = "*")] public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } } public class Senior { [Required(ErrorMessage = "*")] public string Description { get; set; } }</code>
Kaedah IValidableObject
ASP.NET MVC 3 memperkenalkan penyelesaian yang lebih baik untuk pengesahan bersyarat menggunakan antara muka IValidatableObject. Model anda mesti melaksanakan antara muka ini dan menyediakan kaedah Pengesahan yang menerima parameter ValidationContext. Kaedah ini boleh melaksanakan logik pengesahan tersuai dan mengembalikan koleksi objek ValidationResult jika sebarang ralat ditemui.
<code class="language-csharp">public class Person : IValidatableObject { public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (IsSenior && String.IsNullOrEmpty(Senior?.Description)) yield return new ValidationResult("必须提供描述。"); } }</code>
Dengan melaksanakan antara muka IValidatableObject, kami kini boleh melakukan pengesahan bersyarat berdasarkan nilai "IsSenior". Apabila "IsSenior" adalah benar, sifat "Senior.Description" menjadi medan yang diperlukan.
Sintaks yang dipertingkatkan (C# 6.0 dan ke atas)
Dalam C# 6.0 dan lebih baru, kaedah Pengesahan boleh dipermudahkan menggunakan ahli badan ekspresi:
<code class="language-csharp">public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) => IsSenior && String.IsNullOrEmpty(Senior?.Description) ? new[] { new ValidationResult("必须提供描述。") } : Enumerable.Empty<ValidationResult>();</code>
Melalui kaedah di atas, kami boleh melaksanakan pengesahan bersyarat dengan berkesan dalam ASP.NET MVC. Perhatikan penggunaan operator bersyarat null (?.) untuk mengakses Senior.Description dengan selamat dan mengelakkan pengecualian rujukan nol.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengesahan Bersyarat dalam ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!