加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – HTML.CheckBox(string)计算为两个HTML元素而不是

发布时间:2020-12-16 03:31:44 所属栏目:asp.Net 来源:网络整理
导读:代码 %=Html.CheckBox("SendEmail") % 在呈现时评估两个HTML元素 input id="SendEmail" name="SendEmail" type="checkbox" value="true" / input name="SendEmail" type="hidden" value="false" / 这是一个错误吗?还是按设计?如果是设计,为什么? 解决方法
代码

<%=Html.CheckBox("SendEmail") %>

在呈现时评估两个HTML元素

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

这是一个错误吗?还是按设计?如果是设计,为什么?

解决方法

我今天早上遇到了一些问题,从我的MVC应用程序中的复选框组中检索选定的值.我把它发给了我的团队,并认为我会与其他人分享.

回发复选框的值时,所有浏览器的标准行为是从帖子中完全省略未经检查的复选框.因此,如果您有一个未选中的复选框,则在Request.Form中没有显示任何内容.这是大多数开发人员所熟知的一个众所周知的现象.

在ASP.Net MVC中,当您使用Html.Checkbox时,它会尝试解决此问题,并确保您为未选中的复选框返回一个值(在本例中为“false”).这是通过添加包含值’false’的隐藏字段来完成的.

例如.

<%= Html.CheckBox("Sites",s.Selected,new { value = s.Value })%>

生成HTML

<input id="Sites" name="Sites" type="checkbox" value="1" /><input name="Sites" type="hidden" value="false" />

这一切都很好,直到您尝试使用复选框组.这是一个具有相同名称的复选框,其中值以单个逗号分隔的字符串发回.
如果将值定义为数组(string [] Sites),MVC可以自动为您分割此字符串.

这是视图代码:

<% foreach(var s in Model) { %>
              <li><%= Html.CheckBox("Sites",new { value = s.Value })%>
              <label><%= s.Name %></label>
              </li>
       <% } %>

适当的控制器动作:

的[AcceptVerbs(HttpVerbs.Post)]
??????????public ActionResult Edit(int Id,string Name,string SubmissionUrl,string [] Sites)

不幸的是,因为Html.Checkbox也会产生这个隐藏的字段值,结果数组不仅包含所选复选框的值,还包含每个未选中复选框的“false”.你得到一个看起来像这样的数组:

[0] 'false'
[1] 'false'
[2] '110'
[3] '50'
[4] 'false'

其中“false”表示未选中的复选框,而“整数”是所选复选框的值.

如果您只有复选框值的整数并希望将结果定义为整数数组,这可以将代码抛出相当多,如下所示:

public ActionResult Edit(int Id,int [] Sites)

这会导致抛出异常,因为它无法将字符串值’false’转换为整数.

解决方案非常简单,只需避免使用Html.Checkbox并在视图代码中手动创建复选框,如下所示:

<% foreach(var s in Model) { %>
          <li><input type="checkbox" name="Sites" value="<%=s.Value%>" <% if (s.Selected) { %>checked="checked"<% } %> />
          <label><%= s.Name %></label>
          </li>
   <% } %>

希望这有助于其他人!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读