【问题标题】:Manually bind MVC model to checkbox without HTML helper在没有 HTML 帮助器的情况下手动将 MVC 模型绑定到复选框
【发布时间】:2011-09-15 01:02:11
【问题描述】:

我正在从包含三个字段的 ViewModel 对象数组构建屏幕:

    public class StartViewModel {

        public string Id{ get; set; }

        public string Name { get; set; }

        public bool Accept { get; set; }
    }

然后我尝试将它绑定到我的视图,如下所示:

<input type="hidden" name="StartRequests[<%: i.ToString()  %>].Name" value="<%: StartRequests.Name %>" />
<input type="hidden" name="StartRequests[<%: i.ToString()  %>].Id" value="<%: StartRequests.Id%>" />

然后我想将 Accept 标志绑定到一个复选框。我了解该复选框缺少名称属性,因此我无法立即使用它,并且我了解 Html.CheckBoxFor 将生成第二个隐藏字段来存储该值。所以这是我的问题。

我没有能力使用 javascript。我需要配置此复选框以有效调整 ViewModel 中的值,但我不知道如何实现这一点。 Html.CheckBox 助手如何填充它生成的隐藏字段?我认为它是用javascript做到的。有人可以帮我理解一种方法吗?我仍在研究模型绑定背后的想法。

【问题讨论】:

  • Html Helpers 不使用 Javascript,除了客户端验证(作为 Javascript 注入页面)。 Html Helpers 是纯服务器端代码,使用字符串帮助对象将 HTML 元素和属性拼接在一起。如果您不能使用 Javascript,并且您尝试做的事情需要客户端行为(即在您提交之前在浏览器中),那么您就不走运了。
  • 鉴于此,Html.CheckBoxFor 为何退出?

标签: asp.net-mvc checkbox model-binding


【解决方案1】:

对于以下型号:

public class StartViewModel {

    public string Id{ get; set; }

    public string Name { get; set; }

    public bool Accept { get; set; }
}

//-> Accept = false.

解决办法: 将public bool Accept { get; set; } 更改为public string Accept { get; set; }

提交时,如果选中复选框,则“Accept”值 =“on”。顺便检测一下checked值。

【讨论】:

    猜你喜欢
    • 2011-06-20
    • 2018-07-24
    • 2012-11-06
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多