我有可以为空的布尔值,使用以下代码显示为复选框:
@Html.EditorFor(m => m.IsInitialStatus, new { htmlAttributes = new { @onclick = "InitialOrStarting()" } })
然而,在加载页面时,没有将@onclick属性添加到HTML中。我在这里错过了什么吗?我从这个page的答案中得到了一个例子。
我还看过将此更改为CheckBoxFor,但仍然遇到可以为空的Bool数据类型的问题。
对此有任何帮助将不胜感激!我只想要一个可空的bool复选框,其中onClick事件触发到Javascript函数......我不是最高级的用户,但这对我来说似乎比它应该做的更难!?
修改
布尔的EditorTemplate似乎包含:
@model bool?
@Html.CheckBox("", Model.GetValueOrDefault())
答案 0 :(得分:1)
您正在使用EditorFor()
的重载,其中第二个参数为additionalViewData
。如果您没有EditorTemplate
的特定bool?
,则该方法会生成默认模板,<select>
包含null
的3个值,true
和false
,并包含属性。
但是因为你有EditorTemplate
,你需要通过阅读ViewDataDictionary
中的值来自己添加属性(通常,EditorTemplate
包含多个html元素,所以方法不能知道要将属性应用到哪个元素。)
您的模板需要
@model bool?
@{ var attributes = ViewData["htmlAttributes"]; }
@Html.CheckBox("", Model.GetValueOrDefault(), attributes)
话虽如此,你不应该这样做。 bool?
有3个状态(null
,true
或false
),但复选框只有2个状态 - 开启或关闭(转换为true
或{{ 1}})所以你的false
并不代表你财产的可能价值。
如果您只想允许EditorTemplate
或true
,那么您的财产不应该是可以为空的。或者,使用允许false
选择的默认模板(或者如果您想要替代UI,则创建一个呈现3个单选按钮的模板)
此外,我建议您停止使用行为污染标记并使用Unobtrusive JavaScript - 即您的脚本将
null
答案 1 :(得分:0)
Onclick事件不适用于@HtmlEditorFor。但是您可以使用class属性。
<script>
$(".single-checkbox").on("change", function () {
if ($(".single-checkbox:checked").length > 2) {
this.checked = false;
alert ("Only 2 choice")
}
});
</script>
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } })
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } })
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } })
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } })