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

MVC 3 Checkbox Turn Off Validation Not Using RequiredAttribute

本文关键字:requireattribute 验证 复选框 MVC      更新时间:2023-09-26

我一直在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
}

为了构建视图,我为HddRam等创建了部分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]属性!

如果你使用JavaScript,请提供示例。我已经100%熟练了。

看一下万无一失的验证项目,它有更多的验证方法,包括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),因为它说,删除一个属性。

可能有一个更优雅的解决方案,但它同样有效

相关文章:
  • 没有找到相关文章