2

在 MVC4 中,我有一个 EditorFor 字段,它表示一个布尔值并呈现为一个复选框,如果选中该复选框,我想让其他 EditorFor 字段更改为不可编辑。这在纯 html 中很简单,但使用剃刀语法我不知道该怎么做。

<div class="editor-field">
        @Html.EditorFor(model => model.Draw)
        @Html.ValidationMessageFor(model => model.Draw)
    </div>

<script type="text/javascript">
function validate() {
    if (document.getElementById('@Html.EditorFor(model => model.Draw)').checked) {
        alert("checked")
    } else {
        alert("You didn't check it! Let me check it for you.")
    }
}

正在尝试使用该脚本对其进行测试,但由于我不知道编辑器的 ID,因此我不确定该怎么做。

4

2 回答 2

5

如果您使用 CheckBoxFor 而不是 EditorFor(它是一个通用帮助器),您可以通过方法重载轻松添加 HTML 属性。添加 ID 允许您从 JavaScript 访问它。

<div class="editor-field">
    @Html.CheckBoxFor(model => model.Draw, new { ID = "cbxDraw" })
    @Html.ValidationMessageFor(model => model.Draw)
</div>

<script type="text/javascript">
$(document).ready(function() {
    $('#cbxDraw').on('change', function() {
        var $cbx = $(this),
            isChecked = $cbx.is(':checked');

        $cbx.closest('.editor-field')
            .siblings()
            .find(':input')
                .prop('disabled', isChecked);
    });
});
</script>

(注:本例使用 jQuery)

于 2013-01-31T13:52:36.823 回答
5

ASP.NET MVC 4 有NameExtensions提供方法IdFor的新类NameFor。你可以像这样使用它:

document.getElementById('@Html.IdFor(model => model.Draw)')
于 2013-01-31T13:43:01.597 回答