asp mvc @Html.CheckBox("sel",true) 往后台传值问题

@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;" })老年人

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cjm123/p/8065490.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值