0

现在表单可以为我的布尔字段发送三个值。

false
true
""

procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]);

如何构造此变量,以便如果它""不会尝试将其转换为布尔值,而是通过null

4

5 回答 5

4

像这样尝试...首先procedure.needsAuditing Nullable查看此链接以获取可空类型的更多详细信息。然后这样做......

bool? c;
    procedure.needsAuditing =collection["needsAuditing"]==""? c=null: Convert.ToBoolean(collection["needsAuditing"]);
于 2013-05-21T16:01:43.103 回答
4

bool如果您想要表示未确定( )的 a 的第三种状态,null您可以使用 a Nullable<bool>

因此将属性更改为:

public bool? needsAuditing{ get; set; }

并以这种方式分配它:

object needsAuditing = collection["needsAuditing"];
if(needsAuditing == null)
    procedure.needsAuditing = (bool?) null;
else
    procedure.needsAuditing = Convert.ToBoolean(needsAuditing);

旁注:您应该考虑使用帕斯卡大小写属性名。请参阅属性命名准则

于 2013-05-21T16:05:02.823 回答
3
if(string.IsNullOrEmpty(collection["needsAuditing"].ToString())
    procedure.needsAuditing = null;
else 
    procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]);

假设needsAuditing是一个bool?

编辑:我做了 anif else而不是 a因为编译器会抱怨and?之间没有转换(这将是 的返回类型)nullboolConvert.ToBoolean

于 2013-05-21T16:02:08.860 回答
0

创建一个ModelBinder将您的字符串输入转换为可为空的bool类型。

之后您的方法将如下所示:

void Method(bool? value)
{

}
于 2013-05-21T16:04:49.120 回答
0

procedure.needsAuditing属性分配给以下方法的结果:

    bool? ParseInput(string input)
    {
        int integerInput;
        if (int.TryParse(input, out integerInput))
            return integerInput == 1;
        return null;
    }
于 2013-05-21T16:05:32.760 回答