当前位置:  开发笔记 > 后端 > 正文

HTML.CheckBox(字符串)计算为两个HTML元素而不是一个

如何解决《HTML.CheckBox(字符串)计算为两个HTML元素而不是一个》经验,为你挑选了1个好方法。

代码

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

在呈现时评估两个HTML元素

 
 

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



1> Stuntbeaver..:

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

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

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

例如.

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

生成HTML


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

这是视图代码:

<% foreach(var s in Model) { %>
              
  • <%= Html.CheckBox("Sites", s.Selected, new { value = s.Value })%>
  • <% } %>

    适当的控制器动作:

    [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,string Name,string SubmissionUrl,int [] Sites)

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

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

       <% foreach(var s in Model) { %>
              
  • checked="checked"<% } %> />
  • <% } %>

    希望这有助于其他人!

    推荐阅读
    雯颜哥_135
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有