2012-12-20 3 views
2

VB.Net에서 ASP.Net MVC 4를 사용하고 있는데 C#에서 Nullable Boolean에 대한 확인란을 만드는 방법에 대한 몇 가지 다른 답변을 보았습니다. 일반적으로 VB.Net로 변환하는 것은 꽤 간단합니다. 이것은 알아 내지 못합니다.VB.Net의 CheckBoxFor Nullable 부울

다른 대답이 할 말을 ..

을 내 EditorTemplates 폴더에 Boolean.cshtml을하고

@model bool?  
@Html.CheckBox("", Model.GetValueOrDefault()) 

그래서 고집, 나는 EditorTemplates 폴더에서 VB의 equivelent을 시도 I 만든 Boolean.vbhtml 및

@model System.Nullable(of Boolean) 
@Html.CheckBox("", Model.GetValueOrDefault) 

다음 내보기에서 블록 변수

개체 또는 변수가 설정되지 :

@Html.EditorFor(Function(x) x.myNullableBool) 

그 코드는이 예외를 던진다.

꽤 비슷한 C# 예제를 사용하여 여기에 게시 된 것과 매우 유사한 몇 개의 다른 장소가 있습니다. 누구든지이 VB.Net에서 작동하도록하는 방법을 알고 있습니까?

편집

@model System.Nullable(of Boolean) 
@Html.CheckBox("", If(Model is Nothing, False, Model)) 
+0

ViewModel에서 Nullable (부울)을 갖지만 확인란으로 설정하는 이유는 무엇입니까? 여전히 세 가지 가능한 '가치'가 있습니다. 대신 두 개의 다른 ViewModel을 사용하는 것이 좋습니다. 그리고 현재 DomainModel에 바인딩하는 경우 대신 ViewModels을 사용하는 것이 좋습니다. – nik

+1

@milter - 나는 항상 2 가지 값 중 하나를 원하거나 false로하고 싶다. 데이터가 다른 소스에서 올 수 있기 때문에 db는 nullable 상태를 유지해야하며, 그 소스에서 null 일 수있다. 내 경우에는 null이 될 수있다. false가 괜찮습니다 –

답변

3

HTML checkbox 2 개 상태가 (그것이 더 나은 것 일 경우) 내가 할 노력하고있어의 종류 :

  • 체크 됨
  • 체크하지 않음

는 .NET boolean 형 용어로 번역이 의미

  • 이 True
  • 이 False

그래서 체크 박스에 뷰 모델에 Null 허용 부울 속성을 결합하려고 시도하는 거의 모든 논리하지 않습니다 감각. 널 (NULL) 부울 .NET에서 3 주이 있습니다

  • 아무것도 (C#에서 널 (null))를
  • 사실 당신은 단순히 '아무튼 체크 박스의 HTML 의미를 볼 수

그래서

  • 거짓 보기 모델 유형에 맞지 않습니다. Html.CheckBoxFor 도우미가 nullable 부 울린이 아닌 부울 속성을 기대하는 이유는 놀라운 일이 아닙니다.

    그래서 확인란에 바인딩하려는 경우 뷰 모델 속성의 유형을 null이 아닌 부울로 수정하는 것이 좋습니다.당신이 당신의 뷰의 요구 사항에 맞게 올바르게 즉,보기 모델을 설계 할 경우

    @ModelType Nullable(Of Boolean) 
    @Html.CheckBox("", If(Model.HasValue, Model.Value, False)) 
    

    그러나 필요는 없습니다 해킹 그런 종류 :

    그렇지 않으면 당신은 항상 다음과 같은 내용으로 ~/Views/Shared/EditorTemplates/Boolean.vbhtml 사용자 정의 편집기 템플릿을 가질 수있다 .

  • +0

    아마 뷰 모델을 변경할 것이지만 코드를 시도하고 "공용 멤버 'HasValue'유형 '부울'을 찾을 수 없습니다." –

    +0

    커스텀 에디터 템플릿의'ModelType'은'@ModelType Nullable (Of Boolean)'이어야합니다. –

    +1

    아아아, "@ 모델"이 있었는데 "@ 모델 유형"이 필요했습니다. 도움을 주셔서 감사합니다. 아마 ViewModel을 변경할 것입니다. 하지만 여전히 기분이 나아졌습니다. 저는 커스텀 에디터 템플릿에 대해 읽었으며 이제는 작동하도록했습니다. –

    관련 문제