2010-12-17 8 views
11

내 목표는 사용자 문화에 따라 클라이언트 측에서 사용자 입력의 유효성을 검사하는 것입니다.ASP.NET MVC 3 RC2 클라이언트 측 유효성 검사 (세계화 포함)

public class User 
{ 
public int UserId { get; set; } 

[Required] 
[StringLength(20,MinimumLength=3)] 
public string Name { get; set; } 

[Required] 
public double Height { get; set; } 
} 

은 또한, 나는 그것이 유효한 숫자 인 경우 검사 클라이언트 측 유효성 검사를 활성화하려면 :

나는 다음과 같은 구조의 기본 데이터 모델이있다. 따라서 다음 줄을 내 _Layout.cshtml의 <head> 섹션에 추가했습니다.

<script src="@Url.Content("~/Scripts/jQuery-1.4.2.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

나는 (미국이 0.75 수있는 반면이 0,75의 진수 형식 독일어의이 특정 상황에서) 다른 언어 형식으로 입력을 검증 할 수있는 능력을 갖고 싶어하기 때문에, 내가 추가 한을 이전에 언급 된 jquery.validate.min.jsjquery.validate.unobtrusive.min.js 이후의 다음 줄 (jQuery Globalization PlugIn).

<globalization culture="de-DE" uiCulture="de-DE" /> 

지금 나는 다음과 같은 문제가 발생하고있다 :

<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.de-de.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $.culture = jQuery.cultures['de-DE']; 
    $.preferCulture($.culture.name); 
}); 
</script> 

는 또한, 난 그냥 독일의 문화는 항상 선택되어 있는지 확인하기 위해 system.web 섹션의 web.config에 다음 줄을 추가 한 :

나는 "높이"의 값에 대한 텍스트 상자에 (독일의 '맞춤법'을 참고) 0,1 입력하면
  • 유효성 검사 오류 메시지 The field Height must be a number이 나타나고 양식을 제출할 수 없습니다. 내가 0.1 (영어 '맞춤법')를 입력하면, 나는 형태하지만 서버 측 유효성 검사를 제출할 수 있습니다
  • 내가 죽은 잠금 어디에 어떤 종류의 나는 지금 The value '0.1' is not valid for Height.

그래서 다음 유효성 검사 오류 메시지를 반환 나는 나갈 수 없다.

내 목표는 사용자의 문화권 (이 경우 강제로 독일어 임)에 따라 클라이언트 및 서버 측에서 입력 한 십진수의 유효성을 검사하는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

도움이 되었으면 좋겠습니다. 미리 감사드립니다.

답변

8

불행히도 jQuery.validate.format와 jQuery.Globalization.format 함수간에 이름 충돌이 있습니다. 따라서 비 jQuery Globalization 플러그인을 사용하도록 코드를 변경해야합니다.

방금 ​​블로그 게시물을 작성했습니다. here.

당신을 위해 그것은 다음과 같아야합니다

<script src="@Url.Content("~/Scripts/globalization.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/globinfo/Globalization.de-DE.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
$.validator.methods.number = function (value, element) { 
    if (!isNaN(Globalization.parseFloat(value))) { 
     return true; 
    } 
    return false; 
} 
$(document).ready(function() { 
    $.culture = jQuery.cultures['de-DE']; 
    $.preferCulture($.culture.name); 
    Globalization.preferCulture($.culture.name); 
}); 
</script> 

충분해야 함.

+0

'if'는 '0'을 잘못된 값으로 잘못 식별합니다. 함수의 본문으로'return! isNaN (Globalization.parseFloat (value)); '을 사용하십시오. –

+0

플러그인 제작자에게 알려 주셨습니까? 아직 끝나지 않았다면 그렇게 해주시겠습니까? 나는 sde와 같은 문제가 있지만 비공식적 인 방법이나 덮어 쓰기 방법으로 "해킹"하고 싶지 않습니다. – toebens

+0

글쎄, 그냥 코드 파기의 톤을 저장 - 당신은 별이야, 블로그 게시물에 대해 너무 고마워요 그리고 이것을 공유! – Dav

1

UnobtrusiveJavaScript를 비활성화해야했습니다. 페이지가 더 이상 즉시 반응하지 않지만 적어도 작동합니다.

Web.Config에서 기본적으로 사용하지 않도록 설정할 수 있습니다.

MicrosoftAjax.js 
MicrosoftMvcAjax.js 
MicrosoftMvcValidation.js 

또한 JQuery와-1.4.4.min.js & jquery.glob 일을,하지만 난 내부적으로 사용할 생각 :

<appSettings> 
    <add key="enableSimpleMembership" value="false"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="false"/> 
</appSettings> 

는 내가 확인을 위해 마이크로 소프트 스크립트를 사용합니다. 유효성 검사는 MS 스크립트에 의해 수행됩니다.

관련 문제