现在,表单可以为我的布尔字段发送三个值。
false
true
""
procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]);
如何构造此变量,以便如果它是""
,它将不会尝试将其转换为布尔值,而是传递null
?
答案 0 :(得分:4)
尝试这样做......首先让procedure.needsAuditing Nullable
看到Link For More Details For Nullable Type。
然后就这样做......
bool? c;
procedure.needsAuditing =collection["needsAuditing"]==""? c=null: Convert.ToBoolean(collection["needsAuditing"]);
答案 1 :(得分:4)
如果您想要bool
的第三个州,表明未确定(null
),您可以使用Nullable<bool>
。
所以将属性更改为:
public bool? needsAuditing{ get; set; }
并以这种方式分配:
object needsAuditing = collection["needsAuditing"];
if(needsAuditing == null)
procedure.needsAuditing = (bool?) null;
else
procedure.needsAuditing = Convert.ToBoolean(needsAuditing);
旁注:你应该考虑使用pascal case属性名。请参阅Property Naming Guidelines。
答案 2 :(得分:3)
if(string.IsNullOrEmpty(collection["needsAuditing"].ToString())
procedure.needsAuditing = null;
else
procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]);
假设needsAuditing
是bool?
编辑:我执行了if else
而不是?
因为编译器会抱怨null
和bool
之间没有转换(这将是返回类型Convert.ToBoolean
)
答案 3 :(得分:0)
创建一个ModelBinder
,它会将您的字符串输入转换为可为空的bool
类型。
之后你的方法将如下所示:
void Method(bool? value)
{
}
答案 4 :(得分:0)
将procedure.needsAuditing
属性分配给以下方法的结果:
bool? ParseInput(string input)
{
int integerInput;
if (int.TryParse(input, out integerInput))
return integerInput == 1;
return null;
}