2009-09-02 3 views
0

현재 데이터베이스의 여러 필드를 검색하는 고급 검색 페이지가 있습니다. 그것은 여러 텍스트 상자를 가지고 있으며, 모두 다른 필드를 검색합니다. 사용자는 텍스트 상자를 비워 둘 수 있으며 검색에서 무시됩니다.UI의 Nullable 부울 입력 표시

문제는 이제 내 BIT 필드 중 일부를 검색하기 위해이 필드에 추가하고 싶습니다. 원래 아이디어는 확인란을 사용하는 것이 었습니다. 내가 가진 문제는 사용자가이 필드를 검색하지 않아야하므로 N/A, True, False의 3 개 상태가 필요하다는 것을 알게되었습니다. 내가 가지고있는 유일한 아이디어는 드롭 다운이나 라디오 목록과 같은 3 가지 옵션입니다. 그러나 BIT 필드를 검색하는 5 개 이상의 입력이 끝날 수 있으며 이것이 지저분한 지 확실하지 않습니다. 윈도우 응용 프로그램을 개발할 때 체크 박스에 null/선택되지 않은 상태가있을 수 있음을 기억합니다. 웹에 대한 대안이 있는지 확실하지 않습니다. 나는 아무것도 존재하지 않는다면 커스텀 컨트롤을 오른쪽으로하고 싶지 않았습니까?

사람들이 어떻게 디자인 할 것인지에 대한 제안이 있는지 궁금해했습니다.

감사

웹 세계에서

답변

0

체크 박스 만이 상태가 : 확인하거나 선택 해제를

당신은 필드 옆에있는 검색에 사용되는 경우 표시하는 확인란을보고 서비스처럼 할 수

예, 아니요,하지만 이것은 지저분해질 것입니다.

모두, 예 및 아니요 옵션을 사용하여 드롭 다운 메뉴로 이동합니다. 모든 옵션이 기본 옵션입니다.

0

옵션별로 두 개의 라디오 버튼 (예/true 및 아니요/아니요)을 사용하지 않을 수도 있습니다.이 옵션을 선택하지 않으면 아무 것도 입력하지 않고 무시하거나 옵션 중 하나를 선택할 수 있습니다.

유일한 실제 문제는 사용자가 선택한 항목을 다시 한 번 재설정하는 것입니다. "모두 지우기"버튼이 필요하거나 모든 선택 사항을 재설정하거나 목록으로 돌아 가야합니다. 라디오 또는 드롭 다운의 세 가지 옵션이 있습니다.

0

Nullable 부울은 3- 상태를가집니다. 3 개의 라디오 버튼을 사용하면 드롭 다운 목록과 같이 두 번 클릭 할 필요가 없습니다. 또한 확인란을 false로 설정을 취소 할 수 있습니다. 확인란은 확인란 만있는 경우에는 수행 할 수 없습니다.

결과를 보여주는 명확하고 직관적 인 방법은 선택란입니다.

MVC3의 경우 Views | Shared | DisplayTemplates | Boolean.cshtml 파일에 다음 C# Razor 코드를 입력하여 true 일 때 선택란을 선택하고 false 일 경우 선택하지 않은 체크 상자를 표시하고 null 일 경우 아무 것도 표시하지 않습니다 ( ). 일반적으로 Null은 사용자가 결정되지 않았거나 확실하지 않거나 요청하는 질문이 비공개이며 귀하의 비즈니스가 아니라고 생각하는 것을 의미합니다. 공유 | | EditorTemplates | 자동적으로 보여 Boolean.cshtml 파일 3 라디오 버튼을 MVC3를 들어

@model bool? 
@{ 
    //ForDisplay Template - similar template for EditFor 

    Dictionary<string, object> cbAttr = new Dictionary<string, object>(); 


    cbAttr.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("")); 


    if (Model.HasValue && Model.Value) 
    { 

     cbAttr.Add("checked", "checked"); 
     @Html.CheckBox(ViewData.TemplateInfo.GetFullHtmlFieldId(""), cbAttr); 
    } 
    else if (Model.HasValue && !Model.Value) 
    { 
     @Html.CheckBox(ViewData.TemplateInfo.GetFullHtmlFieldId(""), cbAttr); 
    } 
    else 
    { 
     @Html.DisplayText("&nbsp;"); 
    } 
} 

는 뷰에서 다음 C# 면도기 코드를 넣습니다.

@model bool? 
<div data-ui="buttonset"> 
@{ 
    Dictionary<string, object> yesAttrs = new Dictionary<string, object>(); 
    Dictionary<string, object> noAttrs = new Dictionary<string, object>(); 
    Dictionary<string, object> nullAttrs = new Dictionary<string, object>(); 

    yesAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes"); 
    noAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No"); 
    nullAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA"); 

    if (Model.HasValue && Model.Value) 
    { 
     yesAttrs.Add("checked", "checked"); 
    } 
    else if (Model.HasValue && !Model.Value) 
    { 
     noAttrs.Add("checked", "checked"); 
    } 
    else 
    { 
     nullAttrs.Add("checked", "checked"); 
    } 
} 

@Html.RadioButtonFor(x => x, "true", yesAttrs) 
    <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label> 
@Html.RadioButtonFor(x => x, "false", noAttrs) 
    <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label> 
@Html.RadioButtonFor(x => x, "null", nullAttrs) 
    <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">TBD</label> 
</div>