0

사용자 지정 클라이언트 쪽 유효성 검사를 구현하려고하지만 작동하지 않습니다. 나는 Codeproject에 관한 기사에 기초를두고있다. http://www.codeproject.com/Articles/275056/Custom-Client-Side-Validation-in-ASP-NET-MVC3ASP.NET MVC 3 - 사용자 지정 클라이언트 쪽 유효성 검사가 작동하지 않습니다.

나는 또한 여기에서 보았다. 그러나 나는 올바른 방식으로 그것을 구현한다고 생각하지만, 나는 무엇인가를 간과하고있다. 목표는 날짜를 확인하는 것입니다 (필수, 날짜 형식 및 양식의 다른 날짜보다 빠름). 처음 두 단계는 데이터 주석을 사용하여 수행 할 수 있습니다. 마지막 단계는 사용자 정의 유효성 검사와 관련이 있습니다.

내 기본 클래스에있는 일부 dataannotations (ClassLibrary은 VB.NET에) :

Imports System.ComponentModel 
Imports System.ComponentModel.DataAnnotations 

<MetadataType(GetType(CM_CONTRACTVALIDATIONData))> 
Partial Public Class CM_CONTRACTACTIVATION 
    '... 
End Class 

Public Class CM_CONTRACTVALIDATIONdata 
'... 
<DataType(DataType.Date)> 
<Required()> 
Public Property TakeBackDeviceWhen 
'.. 
End Class 

나는 사용자 지정 방법 추가 한 자바 스크립트 파일에서 :

//validation 
$.validator.addMethod("checkPickupDate", function (value, element) { 
    return false; 
}); 
$("#form").validate({ 
    rules: { 
     TakeBackDeviceWhen: { 
      checkPickupDate: true 
     } 
    }, 
    messages: { 
     TakeBackDeviceWhen: { 
      checkPickupDate: "Test" 
     } 
    } 
} 
); 

내 CHTML 파일이에게 다음과 같이 :

@Html.TextBox("TakeBackDeviceWhen", Model.TakeBackDeviceWhen.HasValue ? Model.TakeBackDeviceWhen.Value.ToShortDateString() : "", new { style = "Width: 200px" }) 

결과 HTML은 다음과 같다 :

<input id="TakeBackDeviceWhen" class="hasDatepicker" type="text" value="" style="Width: 200px" name="TakeBackDeviceWhen" data-val-required="The TakeBackDeviceWhen field is required." data-val="true"> 

내 형식 유효성 검사와 사용자 지정 유효성 검사가 모두 구현되지 않은 것으로 보입니다.

무엇이 잘못 되었나요?

+0

나는이 문제를 조사해 왔습니다. MVC 프로젝트를 테스트 해 보았습니다. 그러나 그것도 작동하지 않습니다. 기사를 두 번 확인했고 나는 그들이 나에게 말한 것과 똑같이하고 있다고 생각한다. 이 프로젝트에서는 데이트 체크가 없습니다 : http://www.4shared.com/zip/e9eb0Dza/TestMVC.html?refurl=d1url – JurgenStillaert

+0

OK. DataType이 유효성 검사를 시행하지 않는 것으로 나타났습니다. 프로 ASP.NET MVC3 Framework 페이지 605 : "■ 팁 DataType 속성은 템플릿 입력 된 도우미 (16 장에서 설명)를 사용하여 값 을 렌더링하는 힌트를 제공하기 위해 사용자 입력 전용의 유효성을 검사하는 데 사용할 수 없습니다. 특정 형식을 적용하는 DataType (DataType.EmailAddress) 특성. " – JurgenStillaert

+0

현재 상태 : (1) EditorFor를 사용하지 않습니다. (2) data_val, data_val_required, data_val_date를 htmlattribute로 필드에 추가합니다. (3) DataType 주석은 형식 유효성 검사를 강제하지 않습니다. 여전히 사용자 정의 jQuery 유효성 검사기를 추가하는 데 어려움이 있습니다. http://www.4shared.com/zip/f9G2eNwu/TestMVC2.html을 참조하십시오. – JurgenStillaert

답변

1

정상적으로 해결되었습니다. 나는 희망한다 :-)

오늘 배운 내용 : (1) EditorFor 사용 : MVC 템플릿에서 비계 할 때 입력 필드가 EditorFor에 생성됩니다. 사용자 정의를 추가 할 수없는 것 같습니다. 눈에 거슬리지 않는 유효성 검사 태그. 그래서 TextBoxFor로 바꿀 때까지이 문제를 해결하려고했습니다.

(2) jQuery에서 사용자 정의 유효성 검사 메소드를 추가 할 수 있지만, 눈에 띄지 않는 유효성 검사와 함께 사용할 수는 없습니다. 사용자 정의 방법을 추가 한 후에는 방해가되지 않는 어댑터에도 추가해야합니다. 그리고 바닥에 jQuery를 추가하는 것을 잊지 마세요 : -s (나는 jQuery.validator.unobtrusive.adapters.addMinMax round trips, doesn't work in MVC3에서이있어)

$(function() { 
$.validator.addMethod("checkpickupdate", function (value, element) { 
    if (value == "20/09/2012") { 
     return false; 
    } else { 
     return true; 
    } 
}); 

$.validator.unobtrusive.adapters.addBool("checkpickupdate"); 
} (jQuery)); 

(3) htmlAttributes에 입력 필드에 검증 태그 추가 :

@Html.TextBox("TakeBackDeviceWhen", Model.TakeBackDeviceWhen.HasValue ? Model.TakeBackDeviceWhen.Value.ToShortDateString() : "", 
       new { 
        style = "Width: 200px", 
        data_val = "true", 
        data_val_required = "verplicht!", 
        data_val_date = "moet datum zijn", 
        data_val_checkpickupdate = "wow" 
       }) 

을 (4) 데이터 유형 데이터 주석은 유효성 검사를 시행하지 않습니다. (3)과 같이 추가해야합니다. 당신은 같은 사용자 정의 ValidationAttribute을 추가 할 수 있습니다 (서버 측 유효성 검사) :

public class MustBeDateAttribute : ValidationAttribute { 
    public override bool IsValid(object value) { 
     try 
     { 
      DateTime dte = DateTime.Parse(value.ToString()); 
      return true; 
     } 
     catch (Exception) 
     { 
      return false; 
      throw; 
     } 
    } 
} 

그리고이되는 결과 HTML 출력 :

<input type="text" value="" style="Width: 200px" name="TakeBackDeviceWhen" id="TakeBackDeviceWhen" data-val-required="required!" data-val-date="has to be a date" data-val-checkpickupdate="custom error" data-val="true" class="hasDatepicker valid"> 

내가 다른 프로젝트에서 내 ClassLibrary을 사용하고, 나는 해요 이제 클래스 라이브러리에서 데이터 주석 메타 데이터를 분리하려고 시도 할 것입니다 (어쩌면 종속성 분석기를 사용하여).

관련 문제