ASP.NET:如何使复选框始终未经检查,甚至提交后

时间:2010-12-03 01:01:23

标签: asp.net-mvc checkbox unchecked

刚开始学习如何开发ASP.NET应用程序,我很困惑如何在表单提交时,如果用户勾选复选框,则始终取消选中复选框。该复选框用于确认用户同意条款和条件...当表单提交返回一些错误时,我想在屏幕上显示错误消息并保持复选框未选中,无论是否勾选。

在我看来,我有以下内容:

<%: Html.CheckBoxFor(m => m.UserAgreement) %>

我在我的控制器中尝试了以下两种方法,但没有一种方法有效:

ViewData["UserAgreement"] = false;

return View(new MyModel { UserAgreement = false});

任何人都可以帮忙解决如何实现我的需求?谢谢。

4 个答案:

答案 0 :(得分:1)

这也困扰了我很长一段时间,甚至明确地将我的模型中的值设置为false并没有真正解决这个问题。我发现它还检查了ModelState集合中的值。

这可能不是最干净的解决方案,但这最终对我有用:

private ActionResult DisplayView(string viewName, MyModelClass model)
{
    model.AgreeTerms = false;
    ModelState.Remove("AgreeTerms");

    return View(viewName, model);
}

答案 1 :(得分:0)

除非您明确告知它,否则ASP.NET MVC CheckBox不会保留其状态。

您在上面发布的代码表示在返回视图时应检查“UserAgreement”(值为TRUE),而不是取消选中它。

除非您在将视图返回给用户之前专门将UserAgreement的值设置为“true”,否则将取消选中该复选框。同样,如果您的操作正在接收UserAgreement属性设置为“true”的模型,并且在将其返回到视图之前未将其设置回“false”,则复选框将保持选中状态。

答案 2 :(得分:0)

您的值正保存在ModelState属性中。为了在帖子后重置值。您必须清除ModelState属性中的值

答案 3 :(得分:0)

在返回视图之前尝试ModelState.Remove("UserAgreement");