IValidatableObject
Ciri pengesahan bersyarat ASP.NET MVC membolehkan anda menentukan peraturan pengesahan yang bergantung pada sifat model lain. Ini tidak ternilai apabila medan tertentu memerlukan pengesahan hanya dalam keadaan tertentu.
Mari kita menggambarkan dengan model Person
yang mengandungi Name
, IsSenior
dan kelas Senior
bersarang dengan sifat Description
. Kami akan memerlukan Senior.Description
hanya jika IsSenior
adalah benar.
Berikut ialah model yang menggunakan anotasi data (pendekatan yang lebih ringkas tetapi kurang fleksibel):
<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 = "*")] // This validation is not conditionally applied yet. public string Description { get; set; } }</code>
Dan coretan paparan yang sepadan (ilustratif):
<code class="language-html">@Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) @Html.ValidationMessageFor(m => m.Name) @Html.LabelFor(m => m.IsSenior) @Html.EditorFor(m => m.IsSenior) @Html.ValidationMessageFor(m => m.IsSenior) @Html.LabelFor(m => m.Senior.Description) @Html.EditorFor(m => m.Senior.Description) @Html.ValidationMessageFor(m => m.Senior.Description) </code>
IValidatableObject
Untuk pengesahan bersyarat yang lebih mantap, ASP.NET MVC menawarkan antara muka IValidatableObject
. Melaksanakan kaedah Validate
membolehkan anda mentakrifkan logik pengesahan berdasarkan keadaan keseluruhan model.
Inilah model Person
yang dipertingkatkan menggunakan IValidatableObject
:
<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("Description is required for senior citizens."); } }</code>
Pendekatan ini menawarkan lebih fleksibiliti dan kawalan ke atas peraturan pengesahan. Untuk butiran komprehensif, rujuk dokumentasi Microsoft yang berkaitan (cari "IValidableObject" dan ASP.NET MVC). Contoh di atas menggunakan operator tanpa syarat (?.
) untuk keselamatan tambahan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengesahan Bersyarat dalam ASP.NET MVC Menggunakan Anotasi Data dan IValidableObject?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!