C# 在ASP.NET MVC应用程序的HTML帮助程序中使用可为空的bool

C# 在ASP.NET MVC应用程序的HTML帮助程序中使用可为空的bool,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ASP.NETMVC应用程序。我需要创建一个HTML助手来生成一个自定义复选框字段。我使用复选框字段处理bool值。但是,我不知道如何使用可为空的bool值(bool?)。目前,我有以下扩展方法: public static MvcHtmlString CreateCheckbox<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, bool?>> expression

我有一个ASP.NETMVC应用程序。我需要创建一个HTML助手来生成一个自定义复选框字段。我使用复选框字段处理
bool
值。但是,我不知道如何使用可为空的bool值(
bool?
)。目前,我有以下扩展方法:

public static MvcHtmlString CreateCheckbox<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, bool?>> expression, string classes = " ")
{
  var str = System.Web.Mvc.Html.InputExtensions.CheckBoxFor(html, expression).ToString();
  var s= ModelMetadata.FromLambdaExpression(expression, html.ViewData);
  var html = string.Format("<label for=\"{0}\">{1}&nbsp;{2}</label>", s.PropertyName, str, s.GetDisplayName());
  return new MvcHtmlString(html);
}
public static MvcHtmlString CreateCheckbox(此HtmlHelper html,表达式,字符串类=”)
{
var str=System.Web.Mvc.Html.InputExtensions.CheckBoxFor(Html,expression.ToString();
var s=modelmetada.FromLambdaExpression(表达式,html.ViewData);
var html=string.Format(“{1}{2}”,s.PropertyName,str,s.GetDisplayName());
返回新的MvcHtmlString(html);
}
当我编译它时,我得到以下错误:

Argument 2: cannot convert from 'System.Linq.Expressions.Expression<System.Func<TModel,bool?>>' to 'System.Linq.Expressions.Expression<System.Func<TModel,bool>>'   
参数2:无法从“System.Linq.Expressions.Expression”转换为“System.Linq.Expressions.Expression”
如何在此HTML帮助程序中接受可为null的bool值


谢谢大家!

HTML5为复选框定义了一个称为不确定的属性。不幸的是,它不能用标记设置,只能用JavaScript设置。它不会改变checkbox的值,它只是一个可视的东西。并非所有浏览器都支持它们。我强烈建议您使用下拉列表。因此,用户不会被第三方自定义的3个状态复选框吓倒。此外,下拉列表将适用于所有设备和浏览器。

使用
@Html.EditorFor(m=>m.yourNullableBool)
-它生成一个包含3个值的下拉列表,“True”、“False”和“Not Set”,其中“Not Set”等同于发回时的
null
。不能使用复选框表示可为空的布尔值,因为复选框只有2个状态,而可为空的布尔值有3个状态