MVC中有两个复选框,但每次只允许一个复选框
Two checkboxes in MVC, but only want to allow one at a time
在我的模型中,我有两个bool属性,Approved和Rejected。我希望它们在MVC视图中作为单选按钮或复选框,但一次只希望选择一个。
目前我的观点如下:
<div class="form-group">
@Html.LabelFor(model => model.Approved, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-2">
<div class="checkbox">
@Html.EditorFor(model => model.Approved, new { onclick="SingleCheckbox(this)" })
@Html.ValidationMessageFor(model => model.Approved, "", new {@class = "text-danger"})
</div>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Rejected, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-2">
<div class="checkbox">
@Html.EditorFor(model => model.Rejected, new { onclick="SingleCheckbox(this)" })
@Html.ValidationMessageFor(model => model.Rejected, "", new { @class = "text-danger" })
</div>
</div>
</div>
javascript看起来像这样:
SingleCheckbox = function(rb) {
debugger;
var id = rb.id, uncheck;
if (id == 'Approved') {
uncheck = document.getElementById('Rejected');
} else {
uncheck = document.getElementById('Approved');
}
};
但是当我检查元素时,它甚至没有onclick事件。
我已经更新了我的代码以反映您的建议(见上文),但仍然存在相同的问题。问题是,当我检查元素时,复选框输入没有onclick事件。
这是呈现的HTML:
<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>
问题似乎与@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,使其更通用,我可能想在网站的其他领域使用它。
在chackbox的onclick
中调用SingleCheckbox(this)
而不是SingleCheckbox.call(this)
,如下所示。
@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
。
希望这对你有帮助。
尝试一下,希望它能在中呈现出所需的带有onclick的标记
@Html.EditorFor(model => model.Approved, new { @onclick = '"SingleCheckbox.call(this)"' })
相关文章:
- 复选框:一次只允许单击一个复选框
- jquery从2个json字符串构建一个复选框表单
- 聚合物铁形式验证至少选中一个复选框
- 我有多个复选框,并希望为其中 2 个制定规则,以便如果我选择 1 个,则无法选择另一个
- 如何从多个复选框中获取最后一个值
- 选中复选框的Jquery/Javascript问题使用输入框操作将行从一个表添加到另一个表
- 在单击一个或多个复选框的同时调用iframe
- 如何创建只允许用户在选中前一个复选框的情况下选择复选框的复选框验证
- 复选框一次选中一个不在gridview中工作
- 如果选中了以下复选框,请选中上一个复选框
- 复选框一次选中一个不起作用
- 是否可以让一个复选框包含一个函数
- Jquery复选框影响一个项目而不是所有项目
- 向每个复选框添加一个eventListener
- jquery从另一个复选框控制一个复选复选框
- 根据选中的复选框返回一个字符串
- 函数Javascript的复选框在一个asp:表
- Javascript复选框:使用一个按钮将一个组更改为checked
- 如何为每个复选框分配一个唯一的id
- 通过单击复选框将一个文本框中的数据复制到另一个文本框中