2011-10-06 2 views
6

나는 응용 프로그램에서 일반적으로 YesNo 종류의 드롭 다운을 사용합니다. 이를 위해 필자는 향후 확장을 위해 model (오히려 ViewModel Utility) 클래스를 개발했습니다. 그런 다음기본적으로 부울 false를 선택하는 DropDownListFor (...)

public string Text { get; set; } // represents text part 
     public bool Value { get; set; } // represent value 
     public List<DropDown> DropDowns { get; set; } //list for binding 
     public void BuildYesNoDropDown() 
     { 
      DropDowns = new List<DropDown>(); 
      DropDowns.Add(new DropDown { Text = "Yes", Value = true }); 
      DropDowns.Add(new DropDown { Text = "No", Value = false }); 
     } 

, 나는 다음과 같이보기로 바인딩 :

보기에
@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"Select") //last para - OptionLabel 

, 모든 세 개의 매개 변수가 "예"와 "아니오"를 표시 즉 "선택"을 얻고있다. 그러나 기본적으로 "아니오"가 선택되었습니다. "Value"속성을 정수로 만들면 정상적으로 작동하고 기본적으로 "Select"가 선택되지만 코드에서 언급했듯이 bool 유형과 함께 사용하면 "No"가 선택됩니다.

DataValueField가 bool 일 때 정상적인 작동을 얻으려면 어떻게해야합니까?

답변

7

모델 :

public bool? Value { get; set; } 

보기 : 널 (null), 참, 거짓 : 이것은 널 (NULL) BOOL의 3 주 일치 3 주 자동으로 드롭 다운 목록을 만드는

@Html.EditorFor(model => model.Value) 

. 그 값이 답변이 필요한 경우에는과 같이 데이터 주석을 사용할 수 있습니다

모델 :

[Required] 
public bool? Value { get; set; } 

중요한 점은 당신의 모델이 실제 모델이 될 필요가있다 -이 설정되지 않은에서 입력 값을 모델링 할 필요가 설정. int을 입력해야하는 경우 null 허용 int (예 : int?)를 사용하고 값을 필요로 할 수 있습니다. 이렇게하면 초기 값은 0 대신 null이됩니다. 이미 null이 허용되는 string을 제외한 다른 데이터 유형과 비슷합니다.

+0

감사를 해결했습니다. 그러나 내 질문이 오해 된 것 같아요. 현재 기본적으로 bool 값이 "NO"로 선택되어 있습니다. 대신 OptionLabel을 선택해야하는 "Select"를 원합니다. – StartingFromScratch

+0

다른 사람이 대답하도록하겠습니다. 당신은 그들에게'DropDown' 모델을 제공해야합니다. – Cymen

+0

코드를 게시하기에 충분한 평판이 없다 ... :(문제는 람다 표현식을 사용하는 것입니다. 위의 코드에서 x => x.SelectedValue의 유형은 bool입니다. "값을 제공합니다. 확실하지 않습니다! – StartingFromScratch

1

나는 이것이 오래된 주제라는 것을 알고 있지만 다른 사람들에게 이것은 약간의 배경을 알기에 편리 할 것이라고 생각했다. 그냥 그때는 기본적으로 기본을 선택해야 뷰 모델이 같은 널 수 BOOL을 할 모델을 설정하면 부울의 기본값은

거짓이기 때문에

없음은 기본적으로 선택되어 있습니다 값. :

public bool? Value { get; set; } 

다음은 뷰에서 다음과 같이 당신의 드롭 다운리스트를 설정합니다

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"{Default Select Value}") 

이의 결과가 부울 인 경우는 null 자동으로 선택 옵션이 기본 값되어야한다고해야 {Default Select Value}

3

내 경우에는 동일한 페이지에 이러한 드롭 다운이 많이 있었고 영리하고 선택 목록을 재사용 할 수 있다고 생각했습니다.

var YesOrNoTriState = new List<SelectListItem> { 
    new SelectListItem { Text = "Select", Value = "" }, 
    new SelectListItem { Text = "Yes", Value = true.ToString() }, 
    new SelectListItem { Text = "No", Value = false.ToString() } 
}; 

및 작동하지 않는 뷰

<%: Html.DropDownListFor(x => x.Field1, Model.YesOrNoTriState) %> 
<%: Html.DropDownListFor(x => x.Field2, Model.YesOrNoTriState) %> 

에서

.나는 각 드롭 다운에 대해 별도의 선택 목록을 초기화하고 문제

9

뷰 모델

public bool flag { get; set; } 

보기 답장을

@Html.DropDownListFor(model => model.flag, new List<SelectListItem>() 
{ 
    new SelectListItem() { Text = "Yes", Value = "True" }, 
    new SelectListItem() { Text = "No", Value = "False"} 
}, "Select.....", new { @id = "flag", @class="form-control" }) 
@Html.ValidationMessageFor(model => model.flag) 
+0

모델에'[Required]'데이터 어노테이션이 있다면 이것은 작동하지 않습니다. –

+1

올바른 자바 스크립트 유효성 검사를 사용해야합니다. – JoshYates1980

+1

나를 위해 매력처럼 일했습니다! 세 번째 매개 변수 인 "선택 ....."을 생략하여 항상 필수 필드를 처리하므로 항상 채워집니다. – Reddy

관련 문제