我有以下我直接在HTML中编码:
<label for="RememberMe">
<input type="checkbox" name="RememberMe" id="RememberMe" value="true" />
<span>Remember me?</span>
<input name="RememberMe" type="hidden" value="false">
</label>
当我提交表单时,我会获得其他值,但复选框始终返回false。我知道在示例应用程序中,他们使用这样的东西。那怎么对我不起作用呢?请注意,我必须使用此样式,因为它是我期望的CSS。这就是我不仅仅使用html.checkbox编码方式的原因。
这是我的viewmodel:
public class LoginViewModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
viewmodel与MVC样本中使用的相同。
这是我正在使用的CSS:
label {
display:block;
}
input[type="radio"],
input[type="checkbox"] {
display:none;
}
input[type="radio"] + span:before,
input[type="checkbox"] + span:before {
font-family: 'FontAwesome';
padding-right: 3px;
}
input[type="radio"] + span:before {
content: "\f10c";
}
input[type="radio"]:checked + span:before {
content: "\f111";
}
input[type="checkbox"] + span:before {
content: "\f096";
}
input[type="checkbox"]:checked + span:before {
content: "\f046";
}
这是完整的代码:
<form action="/Account/Login" id="login-form" class="form" method="post">
@Html.AntiForgeryToken()
<div id="input-fields">
<div>
@Html.TextBoxFor(m => m.UserName, new
{
id = "user-name",
placeholder = "Username (or guest)",
required = "required ",
@size = "25"
})
</div>
<div>
@Html.PasswordFor(m => m.Password, new
{
placeholder = "Password (or guest)",
required = "required ",
@size = "25"
})
</div>
<label for="RememberMe">
<input type="checkbox" name="RememberMe" id="RememberMe" value="true" />
<span>Remember me?</span>
<input name="RememberMe" type="hidden" value="false">
</label>
</div>
<button class="medium default" id="login" type="submit">Login</button>
<button class="medium" id="register" type="button" onclick="location.href='/Account/Register'">Register</button>
</form>
还有这个javascript:
<script type="text/javascript">
(function () {
document.getElementsByClassName('form')[0]
.addEventListener("submit", function (ev) {
document.getElementById("login").disabled = true;
document.getElementById("register").disabled = true;
document.getElementById("RememberMe").disabled = true;
document.getElementById('message').innerHTML = ev.target.getAttribute('id') == "register-form" ? "System: Registering " : "System: Authenticating ";
setInterval(function () {
document.getElementById('message').innerHTML += '. ';
}, 3000);
}, false);
})();
</script>
答案 0 :(得分:2)
表单提交时,您似乎禁用了复选框。这可能会阻止传递复选框值,因此它将默认为隐藏字段值。
尝试从javascript中删除此行:
document.getElementById("RememberMe").disabled = true;