2012-03-13 2 views
3

MVC3에서 설정 한 내장 jobery 유효성 검사에 정말 어려움이 있습니다. ... 나는 사용자가 통화 접두사를 입력 할 수 있도록하려는 때문에 EditorFor 괜찮 텍스트 상자를 만드는MVC3 눈에 띄지 않는 jquery 유효성 검사 데이터 값 번호

[DisplayName("GP")] 
    [DataType(DataType.Currency)] 
    [DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)] 
    [Column("gross_profit")] 
    public decimal? GrossProfit { get; set; } 

그러나 검증이 실패 예를 :

내 개체 속성처럼이있다 $ 48,000 .. 클라이언트 쪽 유효성 검사가 실패합니다. 속성은 숫자가 아닙니다.

내 데이터 주석 및이 모델에 대한 맞춤 바인딩을 작성하는 데 문제가 없지만 MVC가 자동으로 해당 "데이터 - 값 - 숫자"를 텍스트에 넣는 것을 중단 할 수는 없습니다 십진 형식이기 때문에 입력하십시오.

"data-val-number"는 입력 필드에 달러 기호 및 쉼표가 포함되어 있기 때문에 jquery의 지나치게 통과하지 않는 유효성 검사를 중지한다고 생각합니다.

그래서 내가

나는 비율에 대해 동일한 접근 방식을 따라 할 것 ... 어떤 세계화 팁, 사용자가 "$ 48,000"와 같은 텍스트를 입력하고이 패스 검증을 할 수 있도록보다는 방법을 찾는 게 아니에요 값 또한 ... 예 "25 %"

답변

1

디스플레이에 decimal? 속성 내에서 숫자가 아닌 값을 사용하지 않으려합니다. 이 문제를 해결할 수있는 몇 가지 방법이 있지만 MVC의 기본 모델 바인더는 항상 ######. ##을 소수 필드로 명시 적으로 매핑하려고 시도합니다. $ ##, ###. ##과 같은 보조 입력이 있다면 그것은 십진수 값으로 직접 변환 할 수 없으므로 폭발합니다.

당신은 2 용액을 상기 제처럼 마스킹 입력을 사용하는 것이다

http://www.xaprb.com/html-input-mask/html-form-input-mask.html

또는 입력 만 UI 표시를 쥔다

http://digitalbush.com/projects/masked-input-plugin/

.

또는 문자열 데이터 형식이있는 모델과 동일한 논리를 사용할 수 있습니다.

[DisplayName("GP")] 
[DataType(DataType.Currency)] 
[DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)] 
[Column("gross_profit")] 
public string CurrencyDisplay { get; set; } 

public decimal? CurrencyInput 
{ 
    get 
    { 
     //parse out non-int fields to return from value in CurrencyDisplay 
    } 

    set 
    { 
     //format string and seed into CurrencyDisplay 
    } 
} 
관련 문제