为什么ASP.NET MVC4中的复选框总是给出false值?

时间:2013-12-30 10:29:21

标签: asp.net-mvc asp.net-mvc-4

我有以下我直接在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>

1 个答案:

答案 0 :(得分:2)

表单提交时,您似乎禁用了复选框。这可能会阻止传递复选框值,因此它将默认为隐藏字段值。

尝试从javascript中删除此行:

document.getElementById("RememberMe").disabled = true;