我一直在寻找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
}
为了构建View up,我为Hdd
和Ram
等创建了部分创建视图,并将它们引用到主视图中:
@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-
属性。我只是不完全确定从哪里开始,自定义属性不是前进的方法。这似乎只是为了改变一些领域。如果没有选中复选框并且验证到位,我仍然希望验证字段,并且该位有效,因此为什么我问这个问题,我只需要能够选择性地关闭不同的部分形式。
哦,作为附注,我的任何实体类中的NON属性都具有[Required]
属性!
如果你做JavaScript,请举例。我已经100%精通了它。
答案 0 :(得分:1)
看看这个万无一失的验证项目,它有更多的验证方法,包括requiredif。 http://foolproof.codeplex.com/
另一方面,有一个设置可以关闭以禁用隐式验证。请查看此答案以获取详细信息https://stackoverflow.com/a/4845768/1563373
答案 1 :(得分:0)
我刚刚禁用了我不希望使用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)
会删除属性。
对此可能有一个更优雅的解决方案,但它的工作原理并不少。