2012-02-04 3 views
1

내 모델 :패스 빈 문자열

[DisplayName("Height")] 
public int? Height { get; set; } 

[DisplayName("Width")] 
public int? Width { get; set; } 

보기 :

<%= Html.TextBoxFor(x => x.Width) %> 
<%= Html.TextBoxFor(x => x.Height) %> 

작업 :

빈 문자열이보기에서 전달되는
if (ModelState.IsValid) 
    SaveSettings(model); 

의 ModelState은 false입니다 ,하지만 유효한 입력, 빈 문자열이 필요합니다 null 전달됩니다 ModelState.IsValid는 true입니다. 이 논리를 추가하기 위해 뷰에 무엇을 추가 할 수 있습니까? 아니면 다른 솔루션일까요? 도와 줘서 고마워.

답변

0

ViewModel에서 문자열 속성을 사용하고 RegEx 유효성 검사기를 사용하여 숫자인지 확인하는 등의 방법이 있습니다. 정규 표현식은 빈 입력에 대해 발생하지 않아야합니다. 그런 다음 ViewModel에서 Model로 이동하면

var m = new Model(); 
m.Property = !String.IsNullOrEmpty(this.Property)? int.parse(this.Property) as int?:null; 
과 같이 문자열 값에 대한 조건부를 수행해야합니다.
0

int? (Nullable<int>)은 빈 문자열을 허용하지 않습니다. 빈 문자열은 null 또는 int 값이 아닙니다 (이는 Nullable<int>의 요구 사항입니다).

이 동작을 가로 채려면 IModelBinder 또는 하위 클래스 DefaultModelBinder을 구현하여 사용자 지정 모델 바인더를 디자인 할 수 있습니다. 이렇게하면 빈 문자열 값을 null (또는 일부 마법 번호이지만, null을 선호합니다)과 동일하게 설정할 수 있습니다.