在我的模型中,我有两个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
答案 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)"' })