次のようなモデルクラスが1つあります。
public class Student
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Enrollment Date")]
public DateTime EnrollmentDate { get; set; }
[Required]
[Display(Name = "Is Active")]
public bool IsActive { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
ここでは、Boolean
属性を持つIsActive
プロパティRequired
を作成しましたが、問題は、このプロパティに必要な検証をビューが実行していないことです。このプロパティをCheckBox
にバインドし、このCheckBox
がチェックされているかどうかを確認し、チェックされていない場合は検証を実行します。
これに対する解決策はありますか?
[Display(Name = "Is Active")]
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")]
public bool IsActive { get; set; }
上記の解決策に感謝し、正しい方向に導いてくれましたが、私にとってはうまくいきませんでした。上記のソリューションを動作させるには、jqueryバリデーターを拡張するページに以下のスクリプトを追加する必要があります。誰かが同様の問題に遭遇した場合、これを共有することを考えました。
<script>
// extend jquery range validator to work for required checkboxes
var defaultRangeValidator = $.validator.methods.range;
$.validator.methods.range = function(value, element, param) {
if(element.type === 'checkbox') {
// if it's a checkbox return true if it is checked
return element.checked;
} else {
// otherwise run the default validation function
return defaultRangeValidator.call(this, value, element, param);
}
}
</script>
Sonu K
投稿に少し追加してみましょう
HTML検証(<input type="checkbox" required/>
)を使用すると、モデルから空の必須フィールドセットを送信できなくなるため、JavaScriptが混乱する可能性があります。
最後に、移行中にIs Active
をデータベースに追加したくない場合(コードを最初に)[NotMapped]
を追加します
完全なコード
[NotMapped]
[Display(Name = "Is Active")]
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")]
public bool IsActive { get; set; }
mVCでデフォルトでtrueに設定されているのは、ブラウザーでチェックがオフになっているにもかかわらず、検証が期待どおりに機能しない可能性があるためです。
<script>
// extend jquery range validator to work for required checkboxes
var defaultRangeValidator = $.validator.methods.range;
$.validator.methods.range = function(value, element, param) {
if(element.type === 'checkbox') {
// if it's a checkbox return true if it is checked
return element.checked;
} else {
// otherwise run the default validation function
return defaultRangeValidator.call(this, value, element, param);
}
}
</script>
コーディングをお楽しみください