@Html.CheckBox("sel",true)

生成2个输入,而不是一个,这是为什么呢?

<input checked="checked" id="sel" name="sel" type="checkbox" value="true" />
<input name="sel" type="hidden" value="false" />

如果未选中复选框,则不会提交表单字段。这就是为什么隐藏领域总是存在虚假价值的原因。如果您不选中复选框,窗体将仍然具有来自隐藏字段的值。这就是ASP.NET MVC如何处理复选框值。

如果你想确认一下,把一个复选框放在不是Html.Hidden的表单上,而是用<input type="checkbox" name="MyTestCheckboxValue"></input>。离开复选框,提交表单,并在服务器端查看张贴的请求值。你会看到没有复选框的值。如果你有隐藏的领域,它将包含有价值的MyTestCheckboxValue条目false

checkbox如果不选中的话,提交表单时它是不会被提交的,这样会导致服务器端controller中Model Binder失败或出错,所以加了隐藏文本框,它的值永远是false,也就是checkbox不选中的话提交的就是这个隐藏文本框的值

选中的时候,false也提交过了,这样不就提交了两个值吗

对,同时提交两个值:true和false,如果是用Model Binder自动绑定对象的话,它会检查提交的值中有没有true,如果有true,它就用true值优先绑定,如果是你自己用Request.Form这样来获取checkbox的值的话,那就小心了,因为你获取的是两个值:true和false

你可以写一个帮手来防止添加隐藏的输入:

using System.Web.Mvc;
using System.Web.Mvc.Html;public static class HelperUI
{public static MvcHtmlString CheckBoxSimple(this HtmlHelper htmlHelper, string name, object htmlAttributes){string checkBoxWithHidden = htmlHelper.CheckBox(name, htmlAttributes).ToHtmlString().Trim();string pureCheckBox = checkBoxWithHidden.Substring(0, checkBoxWithHidden.IndexOf("<input", 1));return new MvcHtmlString(pureCheckBox);}
}

用它:

@Html.CheckBoxSimple("foo", new {value = bar.Id})

2新增页面 里的复选

@Html.CheckBox("ShiYiObjects", new { value = "幼儿" })幼儿
@Html.CheckBox("ShiYiObjects", new { value = "青少年" })青少年
@Html.CheckBox("ShiYiObjects", new { value = "成人" })成人
@Html.CheckBox("ShiYiObjects", new { value = "老年人" })老年人

每个生成2个<input type=“checkbox” />

Request["ShiYiObjects"]  这样获取 得到一个 字符串 中间用逗号隔着

Create(List<string> ShiYiObjects)  参数获取(对象参数获取)  数组   有 8 个 元素 因为有 隐藏域

<input name="ShiYiObjects" type="checkbox" value="幼儿"  />幼儿
<input name="ShiYiObjects" type="checkbox" value="青少年" />青少年
<input name="ShiYiObjects" type="checkbox" value="成人"  />成人
<input name="ShiYiObjects" type="checkbox" value="老年人"  />老年人

Request["ShiYiObjects"]  这样获取 得到一个 字符串 中间用逗号隔着

Create(List<string> ShiYiObjects) 参数获取(对象参数获取)  获取的是一个数组     4 个 元素

3编辑页面 里的复选

一样

<input name="ShiYiObjects" type="checkbox" value="幼儿" @if (Model.ShiYiObject.Contains("幼儿")) { @Html.Raw("checked='checked' ") } />幼儿
<input name="ShiYiObjects" type="checkbox" value="青少年" @if (Model.ShiYiObject.Contains("青少年")) { @Html.Raw("checked='checked' ") } />青少年
<input name="ShiYiObjects" type="checkbox" value="成人" @if (Model.ShiYiObject.Contains("成人")) { @Html.Raw("checked='checked' ") } />成人
<input name="ShiYiObjects" type="checkbox" value="老年人" @if (Model.ShiYiObject.Contains("老年人")) { @Html.Raw("checked='checked' ") } />老年人

或者

@Html.CheckBox("ShiYiObjects", Model.ServiceGroups.Contains("幼儿"), new { value = "幼儿" })幼儿
@Html.CheckBox("ShiYiObjects", Model.ServiceGroups.Contains("青少年"), new { value = "青少年" })青少年
@Html.CheckBox("ShiYiObjects", Model.ServiceGroups.Contains("成人"), new { value = "成人" })成人
@Html.CheckBox("ShiYiObjects", Model.ServiceGroups.Contains("老年人"), new { value = "老年人" })老年人

存在就选上

2018-1-16

新增页面变成这样子

验证不通过 复选框也选上

@Html.CheckBox("ShiYiObjects", Model.ShiYiObject.Contains("幼儿"), new { value = "幼儿", style = "position: unset;" })幼儿
@Html.CheckBox("ShiYiObjects", Model.ShiYiObject.Contains("青少年"), new { value = "青少年", style = "position: unset;" })青少年
@Html.CheckBox("ShiYiObjects", Model.ShiYiObject.Contains("成人"), new { value = "成人", style = "position: unset;" })成人
@Html.CheckBox("ShiYiObjects", Model.ShiYiObject.Contains("老年人"), new { value = "老年人", style = "position: unset;" })老年人

asp mvc @Html.CheckBox(sel,true) 往后台传值问题相关推荐

  1. ASP.NET MVC 后台传值前端乱码解决方案 富文本Ueditor编辑

    只是将当前内容String当成Html插入,我想是跟数据类型转换差不多 //把内容赋值给ueditorvar ue = UE.getEditor('editor');//实例化ue.ready(fun ...

  2. ASP.Net TextBox只读时不能通过后台赋值取值

    ASP.Net TextBox只读时不能通过后台赋值取值 今天在开发一个asp.net的页面遇到了TextBox设置了ReadOnly属性,在js中赋值后,后台代码取不到值的情况,经过在网上查找,找到 ...

  3. Spring MVC遭遇checkbox的问题解决方式

    Spring MVC遭遇checkbox的问题是:当checkbox全不选时候,则该checkbox域的变量为null,不能动态绑定到spring的controller方法的入參上,并抛出异常. 解决 ...

  4. Spring MVC遭遇checkbox的问题解决方案

    Spring MVC遭遇checkbox的问题是:当checkbox全不选时候,则该checkbox域的变量为null,不能动态绑定到spring的controller方法的入参上,并抛出异常. 解决 ...

  5. 多选框向后台传值,多选框的回显,对多选框的各种操作

    1.多选框的回显: js:$(     function(){     var checkBoxAll =$("input[name^='checkbox_']");//获取前缀为 ...

  6. springMVC:后台传值并返回页面

    java后台传值:request.setAttribute("msg","成功!!"); jsp页面可以通过EL表达式获取到request中设置的属性值:< ...

  7. 工作150:1、根据后台传值动态显示开关状态及文字说明(0为文字,1为图标)

    实施方法 Swich默认是boolean类型,而后台传值 为number类型,这个时候我们需要用number来取代boolean类型: <template slot-scope="sc ...

  8. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...

    现在可以对登录窗口进行调试了. 打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件.要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数上加入以下代码: E ...

  9. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...

    登录窗口已经完成了,现在可以完成最后的工作了,主要就是完成Membership提供者的配置. 首先打开Web.Config文件,在configuration段内添加一个数据库连接定义,代码如下: &l ...

最新文章

  1. 二维前缀和+差分 HDU6514 Monitor
  2. OSChina 周日乱弹 ——身价上亿,然而找不到女朋友 你信么?
  3. ip(IP)地址详解!
  4. 【C++】50.编程中切换状态的【有限状态机】
  5. 一个发布app测试版本的网站
  6. windows cmd 窗口 显示信息慢_Windows系统直接运行Linux,竟是如此简单
  7. 1.java的基础和数据类型
  8. Java基础——虚拟机结构
  9. 13.JAVA基础:八进制,十六进制表示
  10. 学习Linux tar 命令:最简单也最困难
  11. centos 安装java_自己动手基于centos7安装docker及如何发布tomcat镜像
  12. C#使用百度API通过IP获取地理位置和坐标
  13. 金橙子打标软件学习流程
  14. ps新手零基础知识入门教程学习_图文
  15. 网易云课堂-数据结构
  16. 【练习】canvas——flappyBird
  17. 32岁坚持裸辞背负房贷1w4,被阿里面试官狂虐,沉淀3个月拿到腾讯offer年薪40w+!
  18. 信息系统风险评估内容
  19. 如何用excel做一份好看的年度业绩报告,让领导满意呢?
  20. ​ios11自带邮件添加新的邮箱账号

热门文章

  1. 如何快速搜索脑机接口社区的历史文章?
  2. runtime无法执行grep_让你的 Shell 命令执行可视化和告警
  3. 这份宝典火了,小哥学后加薪30W+
  4. 用安卓手机解锁目标检测模型YOLOv5,识别速度不过几十毫秒!
  5. 量子信息先行者中科院院士郭光灿:“要把中国量子计算机卖到国外”
  6. 开始报名丨CCF C³-05@亚马逊云科技:未来云计算之旅
  7. 清华「计图」现在支持国产芯片了!动态图推理比PyTorch快了270倍
  8. 打开摄像头,2D插画实时变动画,中国程序媛出品,Demo在线可玩
  9. 又是加拿大!连年拒签NeurIPS参会者被指太荒唐,Hinton亲自过问也没辙
  10. Julia数据统计最全教程,代码图解全都有,昆士兰大学出品,公开免费阅读