2014-07-16 135 views
1

我想添加一个复选框到一个boostrap身份2.0注册表单,以确保用户同意网站的条款和条件。出于某种原因,我收到错误Cannot implicitly convert type 'bool?' to 'bool',我不知道为什么。不能隐式转换类型'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; 
} 

我想到了一个checkb牛是真或假,所以是一个布尔值。

回答

0

真假是对的。没有空状态,所以只需将其更改为简单的布尔值即可。

public bool Agree { get; set; } 
1

这是CheckBoxFor的定义:

public static MvcHtmlString CheckBoxFor<TModel>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, bool>> expression, 
    IDictionary<string, Object> htmlAttributes 
) 

的第一个参数,预计返回boolbool?。没有隐含bool转换为bool?您需要使用类型转换。

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; 
} 

删除,你的复选框将出现。当我将代码放在小提琴中时,只要我注释了该风格,就会显示该复选框。

+0

错误已消失,但我没有看到复选框,但是如果我查看源代码,我会得到'

'任何想法? – iggyweb

+0

你为什么把一个复选框放在标签内?删除标签,看看会发生什么 –

+0

也尝试过,只是一个空白区域,查看源显示'

' – iggyweb

相关问题