私は数週間前に同じ問題がありました。 IMHO私は問題を解決する最良の方法は、jqueryを使用してクライアント側のコントロールを実装することだと思う。 このようにして、StartDateまたはEndDateの値を変更するたびに検証を呼び出すことができます。この場合、サーバーを呼び出さないとクライアント上のデータを検証するためにサーバーを呼び出すほうがよいでしょう。
次のリンクには、クライアント側の検証を実装する手順があります。 Link
これは私のソリューションです:
ステップ1:私はクライアント - の値を検証するため、連続した日付
public class ConsecutiveDateAttribute : ValidationAttribute, IClientValidatable
{
public ConsecutiveDateAttribute()
{
ErrorMessage = "The date must be consecutive";
}
public override bool IsValid(object value)
{
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationParameters.Add("datefield", metadata.PropertyName);
rule.ValidationType = "consecutivedate";
yield return rule;
}
}
のIsValidメソッドの戻り値は常に真を検証する属性クラスを作成します。側。 GetClientValidationRules関数は、各フィールドの検証を呼び出すために、カップルフィールド名とイベント検証名をcshtmlページに渡すために使用されます。
ステップ2:
<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
if ($.validator && $.validator.unobtrusive) {
$.validator.unobtrusive.adapters.addSingleVal("consecutivedate", "datefield");
$.validator.addMethod("consecutivedate", function(value, element) {
if ($("#StartDate").val() != "" && $("#EndDate").val() != "")
return $("#StartDate").val() <= $("#EndDate").val();
// IF both values are not polupated I don't want to validate the field
return true;
});
}
</script>
に
$ .validatorを日付を検証するページではJavaScriptを実装します。属性ConsecutiveDate私は
[Required(), DataType(DataType.Date), ConsecutiveDate()]
public DateTime StartDate { get; set; }
[Required(), DataType(DataType.Date), ConsecutiveDate()]
public DateTime EndDate { get; set; }
ステップ3を検証するフィールドで飾ります。 addMethod( "consecutivedate"、function(value、element)):これは、検証する各フィールドの検証を登録します。
ここにも内容を含めてください。 – deW1
私の最初の返事はすみませんでした。 Nextoneはより完全になります。ご意見ありがとうございます。 –