不能隐式转换类型'bool?'& # 39; bool # 39;
本文关键字:bool 类型 转换 不能 | 更新日期: 2023-09-27 18:13:12
我想添加一个复选框到boostrap身份2.0注册表单,以确保用户同意网站的条款和条件。由于某种原因,我得到错误Cannot implicitly convert type 'bool?' to 'bool'
,我不确定为什么。
AccountViewModel.cs
[Required]
[Display(Name = "Agree Terms and Conditions")]
public Nullable<bool> Agree { get; set; }
Register.cshtml
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @id = "contact-form", role = "form" }))
{
<div class="form-div-5">
<label>
@Html.CheckBoxFor(m => m.Agree, new { @checked = "checked" });
</label>
</div>
}
Site.css
#contact-form {
position: relative;
z-index: 1;
margin: 0 0 20px;
padding: 6px 0 0 0;
vertical-align: top;
font-family: Arial, Helvetica, sans-serif;
}
#contact-form .error {
display: block;
overflow: hidden;
position: absolute;
height: 0px;
font-size: 10px;
color: #F00;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.txt-form {
display: block;
padding-bottom: 6px;
color: #ffffff;
}
.txt-form span {
color: #ffffff;
}
.form-div-1,
.form-div-2,
.form-div-3 {
float: left;
width: 183px;
}
.form-div-1 {
margin-right: 21px;
}
.form-div-2 {
margin-right: 21px;
}
#contact-form div {
overflow: hidden;
}
#contact-form fieldset {
position: relative;
z-index: 10;
overflow: hidden;
padding: 0;
width: 100%;
border: none;
}
#contact-form label .checkbox {
color:#15221E;
height:40px;
text-align:left;
width:324px
}
#contact-form select {
display: block !important;
margin-bottom: 2px;
width: 100%;
border: 1px solid #000;
background: #e1e3e2;
color: #acacac;
font-size: 13px;
line-height: 20px !important;
font-family: Arial, Helvetica, sans-serif;
cursor: pointer;
}
#contact-form select option {
padding-bottom: 3px;
}
#contact-form label {
position: relative;
display: block;
float: left;
margin: 0;
padding: 0;
min-height: 60px;
width: 100%;
}
#contact-form .message {
display: block !important;
min-height: 251px;
width: 100%;
}
#contact-form input,
#contact-form textarea {
-webkit-box-shadow: inset 1px 0 3px rgba(0, 0, 0, 0.32);
-moz-box-shadow: inset 1px 0 3px rgba(0, 0, 0, 0.32);
box-shadow: inset 1px 0 3px rgba(0, 0, 0, 0.32);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
float: left;
margin: 0;
padding: 10px 10px 7px;
width: 100%;
outline: none;
border: none;
background: #e1e3e2;
color: #acacac;
font-size: 13px;
line-height: 20px !important;
font-family: Arial, Helvetica, sans-serif;
}
#contact-form input {
height: 37px;
}
#contact-form input:focus,
#contact-form textarea:focus {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
#contact-form .area .error {
float: none;
}
#contact-form textarea {
overflow: auto;
width: 100%;
height: 287px;
resize: none;
}
#contact-form .success {
position: absolute;
top: 4px;
left: 0;
z-index: 20;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
display: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 14px 10px;
width: 100%;
border: 1px solid #000;
background: #e5412a;
color: #ffffff;
text-align: center;
text-transform: none;
font-size: 18px;
font-family: Arial, Helvetica, sans-serif;
line-height: 22px;
}
#contact-form .error,
#contact-form .empty {
position: absolute;
bottom: 1px;
left: 2px;
display: none;
overflow: hidden;
padding: 5px 4px 0px 0;
width: 100%;
color: #f00;
text-transform: none;
font-size: 11px;
line-height: 1.27em;
font-family: Arial, Helvetica, sans-serif;
}
#contact-form .message .error,
#contact-form .message .empty {
bottom: 5px;
}
.checkbox {
display: inline-block;
cursor: pointer;
font-size: 13px;
margin-right:40px; line-height:37px;
}
input[type=checkbox] {
display:none;
}
.checkbox:before {
content: "";
display: inline-block;
width: 37px;
height: 37px;
vertical-align:middle;
background: #e1e3e2;
color: #acacac;
text-align: center;
box-shadow: inset 0px 2px 3px 0px rgba(0, 0, 0, .3), 0px 1px 0px 0px rgba(255, 255, 255, .8);
border-radius: 3px;
}
input[type=checkbox]:checked + .checkbox:before {
content: "'2713";
text-shadow: 1px 1px 1px rgba(0, 0, 0, .2);
font-size: 15px;
}
我认为复选框是真或假,所以是一个布尔值
您的问题是您这样定义Agree
:
public Nullable<bool> Agree { get; set; }
另一种定义Nullable<bool>
的方式是bool?
,编译器正确地告诉你,bool?
和bool
之间没有隐式转换,因为bool?
类型的变量可以有一个空值,怎么可能映射到一个复选框?
改成:
public bool Agree { get; set; }
编译错误将被修复。
编辑
修改后,你说你的复选框仍然没有显示。然后我要求你发布你的CSS,你做到了。这是令人不快的样式:
input[type=checkbox] {
display:none;
}
删除它,你的复选框将出现。当我把你的代码放到一个提琴中时,当我注释掉那个样式时,复选框就出现了
这是CheckBoxFor的定义:
public static MvcHtmlString CheckBoxFor<TModel>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, bool>> expression,
IDictionary<string, Object> htmlAttributes
)
第一个参数应该返回bool
而不是bool?
。从bool
到bool?
没有隐式的转换,您需要使用类型强制转换。
真或假是对的。没有空状态,所以把它改成一个直接的bool。
public bool Agree { get; set; }