2009-09-02 9 views
0

現在、私のデータベース内のいくつかのフィールドを検索する高度な検索ページがあります。それは、すべてのフィールドを検索するいくつかのテキストボックスを持っている、ユーザーはテキストボックスを空白のままにするオプションがあり、それらは検索から無視されます。UI内にNullableブール値を表示

問題は私のBITフィールドのいくつかを検索するためにこれに追加したいのですが、私の元の考えはこれにチェックボックスを使用することでした。私が持っている問題は、ユーザーがこのフィールドを検索しないようにする必要があるため、3つの状態を必要としないことです。私が持っている唯一の本当のアイデアは、これらの3つのオプションがあるドロップダウンやラジオのリストのようなものです。しかし、BITフィールドを検索する5人以上の入力が終わる可能性があり、これが乱雑になるかどうかはわかりません。私はWindowsアプリケーションを開発するために使用したときに、チェックボックスにもヌル/選択されていない状態があることを覚えています。何かが存在する場合、私は本当にカスタムコントロールを右にしなければならなかったのですか?

誰かがこれをどのようにデザインするかについての提案があったかどうかは不思議でした。ウェブの世界で

おかげ

答えて

0

チェックボックスのみ2の状態を持っている:

をチェックしたり、チェックボックスをオフの場が隣に検索で使用されている場合は、指示するチェックボックスを持っているサービスをレポートに似行うことができますはいといいえのラジオですが、これは乱雑です。

[すべて]、[はい]、[いいえ]のオプションを使用してドロップダウンリストを表示します。すべてデフォルトのオプションです。

0

オプションごとに2つのラジオボタン(yes/trueとno/false)を使用すると、デフォルトではどちらも選択されず、空白のままにして無視するか、オプションの1つを選択できます。

この問題の唯一の問題は、「すべてクリア」ボタンが必要な場合、またはすべての選択肢がリセットされるか、リストに戻った場合に、ラジオまたはドロップダウンの3つのオプションがあります。

0

Nullableブール値には3ステートがあります。 3つのラジオボタンを使用すると、ユーザーはドロップダウンリストと同じように2回クリックする必要がありません。また、チェックボックスをfalseに設定すると、チェックボックスのみを取り消すことができます。

結果を表示するためのわかりやすい方法は、チェックボックスまたは何も表示されません。

MVC3の場合、Views | Shared | DisplayTemplates | Boolean.cshtmlファイルに次のC#Razorコードを入力して、trueの場合はチェックボックスを、falseの場合はチェックボックスをオフにし、nullの場合は何も表示しません( )。通常、Nullは、ユーザーが未確認であることを示しているか、あなたが求めている質問が私的であり、あなたのビジネスのどれでもないと考えていることを意味します。自動的に3-のラジオボタンを表示するBoolean.cshtmlファイル| 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#レイザーコードを置く|共有| EditorTemplates。

@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>