Razor Editor适用于Onclick Event

时间:2018-05-08 10:54:33

标签: asp.net-mvc onclick editorfor

我有可以为空的布尔值,使用以下代码显示为复选框:

@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())

2 个答案:

答案 0 :(得分:1)

您正在使用EditorFor()的重载,其中第二个参数为additionalViewData。如果您没有EditorTemplate的特定bool?,则该方法会生成默认模板,<select>包含null的3个值,truefalse,并包含属性。

但是因为你有EditorTemplate,你需要通过阅读ViewDataDictionary中的值来自己添加属性(通常,EditorTemplate包含多个html元素,所以方法不能知道要将属性应用到哪个元素。)

您的模板需要

@model bool?
@{ var attributes = ViewData["htmlAttributes"]; }
@Html.CheckBox("", Model.GetValueOrDefault(), attributes)

话虽如此,你不应该这样做。 bool?有3个状态(nulltruefalse),但复选框只有2个状态 - 开启或关闭(转换为true或{{ 1}})所以你的false并不代表你财产的可能价值。

如果您只想允许EditorTemplatetrue,那么您的财产不应该是可以为空的。或者,使用允许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" } })