C# MVC中的三值复选框#

C# MVC中的三值复选框#,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个绑定到视图的模型,它对我模型中的所有成员都非常有效,除了bool?成员们 我的视图基本上是一个搜索过滤器弹出窗口,用户可以选择通过以下方式过滤我们的记录: 有电话(他们会将复选框设置为true) 没有电话(他们将不选中复选框) 不管他们做还是不做(这就是为什么我需要第三种选择) 从技术上讲,我的模型的bool成员将具有true、false或null 在我的代码中,如果用户没有设置复选框,则默认情况下将其设置为false,如果他们勾选了复选框,则将其设置为true 我如何处理这个问题

我有一个绑定到视图的模型,它对我模型中的所有成员都非常有效,除了bool?成员们

我的视图基本上是一个搜索过滤器弹出窗口,用户可以选择通过以下方式过滤我们的记录:

  • 有电话(他们会将复选框设置为true)
  • 没有电话(他们将不选中复选框)
  • 不管他们做还是不做(这就是为什么我需要第三种选择)
从技术上讲,我的模型的bool成员将具有
true
false
null

在我的代码中,如果用户没有设置复选框,则默认情况下将其设置为
false
,如果他们勾选了复选框,则将其设置为
true

我如何处理这个问题

@Html.LabelFor(m=>m.hasphone,“Has Phone”,新的{@class=“control label”})

@CheckBoxFor(m=>hasphone,new{htmlAttributes=new{@class=“form control”,value=Model.id,@checked=false})

这是因为复选框或单选按钮只有两种状态,选中或未选中

在你的描述中,它似乎没有电话或者没关系,不管怎样,都不要选中这个框,那么为什么你需要第三个选择呢


如果你真的想要3个选项,可以使用一组三个单选按钮,每个选项一个,或者一个下拉列表。

我终于想出了在Razor中如何做,以防有人卡住

@Html.LabelFor(m => m.hasphone, "Has Phone ", new { @class = "control-label" })
<fieldset id="hasphone">
     <label><input type="radio" name="hasphone" class="form-control" value="true" />Yes</label>
     <label><input type="radio" name="hasphone" class="form-control" value="false" />No</label>
     <label><input type="radio" name="hasphone" class="form-control" />Any</label>
</fieldset>
@Html.LabelFor(m=>m.hasphone,“Has Phone”,新的{@class=“control label”})
对
不
任何
我们的想法是创建一个包含3个选项的组,将您的组命名为与属性名称相同的名称

然后将单选按钮名称设置为组名
name=“hasphone”
,最后第一个单选按钮的值将为true
value=“true”
,对应于模型的成员
true
值,false对应于
false


最后,通过不设置第三个单选按钮的值,可以得到空值

假设我们有100条记录,50条有电话记录,50条没有电话记录,如果他勾选“有电话记录”则得到50条,如果他勾选“没有只有请”则得到50条。如果他想要任何,那么他得到100有3个选项,所以使用单选按钮。我会使用@Html.EditorFor(m=>m.HasPhone,new{@class=“form check input”,Value=m.HasPhone})是的单选按钮似乎是需要的,不知道为什么我以前没有看到你可以使用单选按钮或创建你自己的助手,因为你可以看到你需要使你的属性为空。像公共图书馆?HasPhone{get;set;}然后将值设置为
null