mvc 3.0 및 jquery를 처음 사용합니다. 나는 사용자 정의 유효성 검사 특성을 사용하여 클라이언트 측과 서버 측에서 '날짜'를 확인하려고합니다. 그것은 서버 측에서 잘 작동하지만 클라이언트 측에서 작동하게 만들 수는 없습니다.MVC 3.0 - 사용자 정의 속성에 대해 눈에 거슬리지 않는 클라이언트 측 유효성 검사가 작동하지 않습니다.
mvc 3.0, jquery, IE 7.0을 사용 중입니다. 우리는 MVC 3.0에서 global.ascx에 어떤 것을 등록해야합니까?
내가 잘못 된 부분을 알려주십시오. TIA. 여기
내 코드입니다 :유효성 검사
public class FutureDateAttribute : ValidationAttribute, IClientValidatable
{
private const string DateFormat = "mm/dd/yyyy";
private const string DefaultErrorMessage = "'{0}' must be a date between {1:d} and current date.";
public DateTime Min { get; set; }
public DateTime Max { get; set; }
public FutureDateAttribute(string min)
: base(DefaultErrorMessage)
{
Min = ParseDate(min);
Max = DateTime.Now;
}
public override bool IsValid(object value)
{
if (value == null || !(value is DateTime))
{ return true; }
DateTime dateValue = (DateTime)value;
return Min <= dateValue && dateValue <= Max;
}
private static DateTime ParseDate(string dateValue)
{
return DateTime.ParseExact(dateValue, DateFormat, System.Globalization.CultureInfo.InvariantCulture);
}
public override string FormatErrorMessage(string name)
{
return String.Format(System.Globalization.CultureInfo.CurrentCulture, ErrorMessageString, name, Min);
}
public class ModelClientValidationFutureDateRule : ModelClientValidationRule
{
public ModelClientValidationFutureDateRule(string errorMessage,
DateTime min)
{
ErrorMessage = errorMessage;
ValidationType = "futuredate";
ValidationParameters["min"] = min.ToString("mm/dd/yyyy");
ValidationParameters["max"] = DateTime.Now.ToString("mm/dd/yyyy");
}
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationFutureDateRule("Error message goes here", this.Min);
yield return rule;
}
JQuery와
(function ($) {
$.validator.addMethod('futuredate', function (value, element, param) {
if (!value) return false;
var min = $(param.min).val();
var max = $(param.max).val();
if (value < min || value > max) {
return false;
}
return true;
});
$.validator.unobtrusive.adapters.add(
'futuredate', ['min', 'max'],
function (options) {
var params = {
min: options.params.min,
max: options.params.max
};
options.rules['futuredate'] = params;
if (options.message) {
options.messages['futuredate'] = options.message;
}
});
} (jQuery));
참조 속성
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
///reference path="jquery-1.5.1.min.js" />
///reference path="jquery.validate.js" />
///reference path="jquery-ui-1.8.11.js" />
///reference path="jquery.validate.unobtrusive.min.js" />
///reference path="jquery.validate-vsdoc.js" />
모델 :이 문제의 몇 가지가 있습니다
[DisplayName("Assigned Date :")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "Assigned Date is required")]
[DataType(DataType.Date)]
[FutureDate("12/31/1899", ErrorMessage = "'{0}' must be a date between {1:d} and current date.")]
public DateTime? AssignedDate { get; set; }
고맙습니다 Darin, 그 작업 :) – HKGR
@DarinDimitrov "Model"에 정의 된 오류 대신 항상 같은 오류가 발생하므로 오류 메시지가 여기에옵니다 " –
확인. 알았어. 그것은'String.Format (ErrorMessage, metadata.GetDisplayName(), this.Min)'이 될 것입니다. –