我想在boostrap identity 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;
}
我认为复选框为true或false,因此是布尔值。
答案 0 :(得分:1)
这是CheckBoxFor的定义:
public static MvcHtmlString CheckBoxFor<TModel>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, bool>> expression,
IDictionary<string, Object> htmlAttributes
)
第一个参数预计会返回bool
而不是bool?
。从bool
到bool?
没有隐式转换,您需要使用类型转换。
答案 1 :(得分:1)
您的问题是您定义Agree
,如下所示:
public Nullable<bool> Agree { get; set; }
定义Nullable<bool>
的另一种方法是bool?
,编译器正确告诉您bool?
和bool
之间不存在隐式转换,因为bool?
类型的变量可以具有空值,如何将其映射到复选框?
将其切换为:
public bool Agree { get; set; }
编译错误将被修复。
修改强>
进行更改后,您表示您的复选框仍未显示。然后我让你发布你的CSS,你做了。这是令人讨厌的风格:
input[type=checkbox] {
display:none;
}
删除它,然后会出现您的复选框。当我把你的代码放在一个小提琴里时,我立刻注明了这个样式。
答案 2 :(得分:0)
真或假是对的。没有空状态,所以只需将其改为直接布尔。
public bool Agree { get; set; }