Tôi đã gặp sự cố tương tự vài tuần trước. IMHO Tôi nghĩ rằng cách tốt nhất để giải quyết vấn đề là thực hiện một điều khiển phía máy khách bằng cách sử dụng jquery. Bằng cách này, bạn có thể gọi xác thực mỗi khi bạn thay đổi giá trị vào ngày bắt đầu hoặc ngày kết thúc. Trong trường hợp này, tốt hơn là gọi cho máy chủ để xác thực dữ liệu của bạn trên máy khách bởi vì bạn không gọi máy chủ.
Trong liên kết sau có một quy trình để thực hiện xác thực phía máy khách. Link
Đây là giải pháp của tôi:
Bước 1: Tạo Lớp thuộc tính để xác nhận ngày liên tiếp
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 phương pháp trở lại luôn luôn đúng bởi vì tôi muốn để xác nhận các giá trị trên khách hàng- bên. Hàm GetClientValidationRules được sử dụng để chuyển tới trang cshtml tên trường và tên xác thực của cặp vợ chồng để gọi xác thực cho từng trường.
Bước 2: Trang trí với các thuộc tính ConsecutiveDate các lĩnh vực mà tôi muốn xác nhận
[Required(), DataType(DataType.Date), ConsecutiveDate()]
public DateTime StartDate { get; set; }
[Required(), DataType(DataType.Date), ConsecutiveDate()]
public DateTime EndDate { get; set; }
Bước 3: Thực hiện trong trang javascript để xác nhận ngày
<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. addMethod ("consecutivedate", chức năng (giá trị, phần tử): điều này đăng ký xác thực cho từng trường mà tôi muốn xác thực.
Bao gồm nội dung của liên kết tại đây. Vui lòng – deW1
Tôi xin lỗi là câu trả lời đầu tiên của tôi. Nextone sẽ hoàn chỉnh hơn. Cảm ơn phản hồi của bạn. –