MVC 3复选框关闭验证不使用RequiredAttribute

时间:2013-05-17 09:51:24

标签: c# javascript jquery asp.net-mvc-3

我一直在寻找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,我为HddRam等创建了部分创建视图,并将它们引用到主视图中:

@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%精通了它。

2 个答案:

答案 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)会删除属性。

对此可能有一个更优雅的解决方案,但它的工作原理并不少。