【发布时间】:2017-04-25 09:31:47
【问题描述】:
早安,
我的 c# mvc 项目的 create.cshtml 页面上有以下复选框区域。我正在为我的项目使用 Visual Studio 2015。
我的网页上有一个部分,它以复选框的形式为用户列出了三个选项。用户必须至少选择其中一项。
这就是我的 create.cshtml 页面上复选框的代码......
@Html.CheckBoxFor(model => model.carer.ParentResp, new { id = "rbParent" }))
@Html.Label("rbParent", "Parental Responsibility")<br />
@Html.CheckBoxFor(model => model.carer.NextOfKin, new { id = "rbNext" })
@Html.Label("rbNext", "Next of Kin")<br />
@Html.CheckBoxFor(model => model.carer.Keyholder, new { id = "rbKey" })
@Html.Label("rbKey", "Keyholder?")
使用上面的代码,我对所有三个项目都有以下错误....
- 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型...
- 不能隐式转换类型“bool”? '布尔'。存在显式转换(您是否缺少演员表?)
在我的数据库中,这三个字段设置为数据类型位,在我的 mvc 项目中的模型中,它们是使用实体框架作为数据类型 bool 引入的。
我相信在我的控制器中,我需要检查这些项目是否被选中。
我已将以下代码添加到我的控制器中...
//Do a check to see if the checkbox have a value
if (carer.ParentResp.HasValue || carer.NextOfKin.HasValue || carer.Keyholder.HasValue)
{
vmPopulateData.carer = carer;
}
else
{
ClientScript.RegisterClientScriptBlock(Me.GetType(), "Message", "alert('" + "Please Select all check boxes that apply" + "');", true);
}
我只是想检查三个复选框中的任何一个是否有值,如果没有,则向用户显示一条消息。
我见过很多例子使用 ClientScript.RegisterClientscriptBlock 方法,但我无法让它工作。我收到以下错误消息...
- 当前上下文中不存在名称“ClientScript”
- 当前上下文中不存在名称“我”
我是否缺少注册这些项目的命名空间?
我真的很难让这个功能正常工作。人们以前使用过的任何指针或示例都将受到欢迎。我不想在这里做任何非常聪明的事情或过度设计任何事情。只是寻找一个简单的验证元素来检查并查看用户是否至少检查了一项以便可以提交表单。
问候 贝蒂
【问题讨论】:
-
ParentResp等是bool的类型——它们没有.HasValue属性(仅适用于bool?)。你可以使用if (carer.ParentResp || carer.NextOfKin || .... -
而
ClientScript.RegisterClientScriptBlock()是webforms 代码,不适用于MVC。您只需添加一个ModelStateError并返回视图以显示错误消息(如果没有选择) -
您正在尝试将 CheckBox 用作 RadioButton。为什么不直接使用 RadioButtonFor ?
-
您说过数据库字段是
BIT,模型属性是bool- 但我认为您的意思是bool?(可为空)? -
@ Ksv3n,我的印象是,使用复选框您可以选择多个项目,而使用收音机 btn 您只能选择一个?我的用户需要至少选择一个选项,但可以选择全部三个?
标签: c# validation asp.net-mvc-4 razor checkbox