将客户端复选框单击的处理程序添加到 Razor 视图

Add a client-side checkbox clicked handler to Razor view

提问人:Maxim V. Pavlov 提问时间:1/27/2012 最后编辑:GerickeMaxim V. Pavlov 更新时间:11/28/2017 访问量:13974

问:

以下标记生成一个 checkbox 类型的输入,其中包含 何时将 Razor 视图发送到浏览器。id="IsRecurring"

<div class="editor-label">
    @Html.LabelFor(model => model.IsRecurring)
</div>

<div class="editor-field">
    @{
        @Html.EditorFor(model => model.IsRecurring)
    }
</div>

我需要根据复选框的选中状态显示/隐藏其他标记块。

哪种方式最符合 MVC3 要求?

我的计划是在 div 上方添加以下脚本:

<script type="text/javascript">
    $("#IsRecurring").click(function () {
        do show hide;
    });
</script>

在我的 View 标记中放置脚本的适当位置在哪里?有没有更好的方法可以引用复选框,而不是提前知道它将具有什么 ID?IsReccuring

ASP.NET-MVC-3 剃刀 不显眼的javascript

评论


答:

3赞 Fernando Mondo 1/27/2012 #1

隐藏/显示是我会使用脚本的行为,在复选框中添加一个类:

@Html.CheckBoxFor(model => model.IsRecurring, new {@class "recurring"})


//event
$(".recurring input:checkbox").click(function () {
                   //hide/show
                });

评论

1赞 korzeniow 1/27/2012
无需使用新类,因为 Razor 引擎将 checkbx 绑定到模型,因此将 ID 的 IsRecurring 提供给复选框
0赞 Maxim V. Pavlov 1/27/2012
事件处理逻辑在视图中的什么位置?它甚至计量吗?我将如何通过 ID 引用元素。我没有一类复选框,因此在我的情况下错误地使用了一个类。
4赞 Felix 1/27/2012 #2

你可以试试这样:

@Html.CheckBoxFor(model => model.IsRecurring, new {onchange = "checkedChanged"})

//JS
var checkedChanged = function () {
    alert("checkedChanged");
}

评论

1赞 korzeniow 1/27/2012
比 IE9 更旧的 IE 无法识别更改事件 AFAIK
0赞 Maxim V. Pavlov 1/27/2012
正如我所提到的,我愿意使用一种不显眼的方法来将客户端脚本逻辑与文档模型分开。另外,我的问题包括“JS应该在视图中去哪里”?
1赞 Randy Eppinger 6/6/2014
这对我们有用。Maxim,我们将javascript放在一个外部.js文件中,并带有脚本标签。
0赞 Bogdan Mates 9/2/2015 #3

您也可以尝试:

$('#checkboxId').click(function () {
    //add code here
    });