MVC 3复选框关闭验证而不使用requireattribute
本文关键字:requireattribute 验证 复选框 MVC | 更新日期: 2023-09-27 18:14:17
我一直在stackoverflow周围寻找这个答案。他们似乎没什么进展。我有一个实体它有5个到其他实体的导航属性。例子:
public class Computer : DbEntity
{
public virtual Ram Ram { get; set; }
public Guid RamId { get; set; }
public virtual Hdd Hdd { get; set; }
public Guid HddId { get; set; }
// etc. etc. you get the picture
}
为了构建视图,我为Hdd
和Ram
等创建了部分Create视图,并将它们引用到主视图中:
@model ComputerSite.ViewModels.ComputerViewModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Computer Details</legend>
... some fields ...
</fieldset>
Html.RenderPartial("Create", "Ram");
Html.RenderPartial("Create", "Hdd");
}
我测试了这个,它工作了,所有的数据被张贴回ViewModel它可以保存在数据库中,所以我知道所有的工作。当Computer
没有Ram
时,问题就出现了。我希望能够勾选一个框,说这将不包括在内。当提交表单时绕过Ram
验证。
应该有一个非常容易和简单的方法,我不介意如果它是一个JavaScript函数去和改变一些data-
属性客户端。我只是不完全确定从哪里开始,自定义属性不是前进的方向。仅仅改变一些领域似乎太多了。我仍然希望字段验证,如果复选框没有被选中,验证是到位的,这一点是有效的,因此为什么我问这个问题,我只需要能够有选择地关闭表单的不同部分。
哦,作为旁注,我的任何实体类的属性都没有[Required]
属性!
看一下万无一失的验证项目,它有更多的验证方法,包括requiref。http://foolproof.codeplex.com/
在not旁边,有一个可以关闭的设置来禁用隐式验证。详细信息请查看此答案https://stackoverflow.com/a/4845768/1563373
我只是禁用了我不想使用JQuery验证的表单部分,这是有效的。
<script type="javascript">
$(function () {
function EnableControls() {
$("#Computer_Cpu").removeAttr("disabled");
$("#Computer_Motherboard").removeAttr("disabled");
}
function DisableControls() {
$("#Computer_Cpu").attr("disabled", "disabled");
$("#Computer_Motherboard").attr("disabled", "disabled");
}
var disabled = true;
$("#Enable_Controls_Checkbox").change(function () {
if (disabled) {
EnableControls();
} else {
DisableControls();
}
});
DisableControls();
})
</script>
作为运行,这个脚本在加载时禁用我想要的所有控件。默认情况是你不能编辑它们。有一个名为Enable_Controls_Checkbox
的复选框,当选中该复选框时,将启用上述控件。从我的理解attr(obj, obj)
添加/更改HTML Dom的属性,和removeAttr(obj)
,因为它说,删除一个属性。
可能有一个更优雅的解决方案,但它同样有效