MVC中的两个复选框,但只想一次允许一个

时间:2015-12-04 17:01:47

标签: javascript asp.net-mvc

在我的模型中,我有两个bool属性,Approved和Rejected。我希望它们可以作为MVC视图上的单选按钮或复选框,但只希望一次选择一个。

目前我的观点如下:

SingleCheckbox = function(rb) {
    debugger;
    var id = rb.id, uncheck;
    if (id == 'Approved') {
        uncheck = document.getElementById('Rejected');
    } else {
        uncheck = document.getElementById('Approved');
    }
};

javascript看起来像这样:

<div class="form-group">
    <label class="control-label col-md-2" for="Approved">Approved</label>
    <div class="col-md-2">
        <div class="checkbox">
            <input class="check-box" id="Approved" name="Approved" type="checkbox" value="true"><input name="Approved" type="hidden" value="false">
            <span class="field-validation-valid text-danger" data-valmsg-for="Approved" data-valmsg-replace="true"></span>
        </div>
    </div>
</div>
<div class="form-group">
    <label class="control-label col-md-2" for="Rejected">Rejected</label>
    <div class="col-md-2">
        <div class="checkbox">
            <input class="check-box" id="Rejected" name="Rejected" type="checkbox" value="true"><input name="Rejected" type="hidden" value="false">
            <span class="field-validation-valid text-danger" data-valmsg-for="Rejected" data-valmsg-replace="true"></span>
        </div>
    </div>
</div>

但是当我检查元素时,它甚至没有onclick事件。

我已更新我的代码以反映您的建议(见上文),但仍然存在同样的问题。问题是当我检查元素时,复选框输入没有onclick事件。

以下是呈现的HTML:

document

3 个答案:

答案 0 :(得分:1)

如下所示,在SingleCheckbox(this) chackbox中调用SingleCheckbox.call(this)而不是onclick

@Html.CheckBoxFor(model => model.Approved, new { onclick = "SingleCheckbox(this)" })
@Html.CheckBoxFor(model => model.Rejected, new { onclick = "SingleCheckbox(this)" })

SingleCheckbox应该如下。

var SingleCheckbox = function (rb) {
    var id = rb.id, uncheck;
    if (id == 'Approved') {
        uncheck = document.getElementById('Rejected');
    } else {
        uncheck = document.getElementById('Approved');
    }

    uncheck.checked = false;
}

更新:在asp.net mvc4中,它的早期版本@Html.EditorFor没有htmlAtrributes的参数。您可以改为使用@Html.CheckBoxFor

希望这会对你有所帮助。

答案 1 :(得分:1)

问题似乎与@Html.EditorFor助手有关。我改变了我的代码,现在它正在运行。

<div class="form-group">
    @Html.LabelFor(model => model.Approved, htmlAttributes: new {@class = "control-label col-md-2"})
    <div class="col-md-2">
        @Html.CheckBoxFor(model => model.Approved, new { onclick = "SingleCheckbox(this)" })
        @Html.ValidationMessageFor(model => model.Approved, "", new {@class = "text-danger"})
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.Rejected, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-2">
        @Html.CheckBoxFor(model => model.Rejected, new { onclick = "SingleCheckbox(this)" })
        @Html.ValidationMessageFor(model => model.Rejected, "", new {@class = "text-danger"})
    </div>
</div>

我只需要更新javascript更通用,我可能想在网站的其他区域使用它。

答案 2 :(得分:0)

尝试这个希望它会渲染所需的标记,其中包含onclick

@Html.EditorFor(model => model.Approved, new { @onclick = '"SingleCheckbox.call(this)"' })