Jquery 子实体的RequiredIf验证

Jquery 子实体的RequiredIf验证,jquery,validation,asp.net-mvc-3,Jquery,Validation,Asp.net Mvc 3,我正在尝试让我的MVC3应用程序使用以下属性显示RequiredIfs的验证消息: 现在,若并没有子实体,它可以正常工作,但我有一个用户,那个么需要验证用户地址对象。实际上,即使一个地址也可以工作,但有3个加法,每个加法都有一个复选框,指示它是否处于活动状态 我尝试如下更改validator.unobtrustive.js的jQuery,以获得验证时的正确值(地址为“address”或“BillingAddress”): $.each(this.params, function () {

我正在尝试让我的MVC3应用程序使用以下属性显示RequiredIfs的验证消息: 现在,若并没有子实体,它可以正常工作,但我有一个用户,那个么需要验证用户地址对象。实际上,即使一个地址也可以工作,但有3个加法,每个加法都有一个复选框,指示它是否处于活动状态

我尝试如下更改validator.unobtrustive.js的jQuery,以获得验证时的正确值(地址为“address”或“BillingAddress”):

$.each(this.params, function () {
                    var address = element.name.split('.')[0] + '_';
                    paramValues[this] = this.toString() == 'dependentproperty' ? address + $element.attr(prefix + this) : $element.attr(prefix + this);
                });
仅当选中RequiredIf所依赖的所有可能复选框时,此选项才起作用。以下内容验证所有加法,并在视图上输出消息:

$.each(this.params, function () {
                    paramValues[this] = this.toString() == 'dependentproperty' ? 'Address_' + $element.attr(prefix + this) : $element.attr(prefix + this);
                });
任何关于它为什么会这样的帮助或想法都是受欢迎的=)其他解决问题的方法我很乐意接受。谢谢你的帮助


编辑

我意识到javascript的东西无论如何都不起作用,现在我已经从模型中获得了正确的ID。但我仍然有一个错误,那就是它只在选中所有复选框时才进行验证。你知道为什么吗

地址的模型构建如下:

[RequiredIf("IsActive", true)]
    [Display(Name = UserManagementResources.sdAddressText, ResourceType = typeof(UserManagementResources))]
    public string Street
    {
        get { return _address["sdAddress"]; }
        set { _address["sdAddress"] = value; }
    }

    [RequiredIf("IsActive", true)]
    [Display(Name = UserManagementResources.sdCityText, ResourceType = typeof(UserManagementResources))]
    public string City
    {
        get { return _address["sdCity"]; }
        set { _address["sdCity"] = value; }
    }
ViewModel包含不同的地址

 public Address Address
    {
        get { return _address ?? (_address = new Address(Customer.Name, _domain, "Address") { IsActive = true }); }
    }

    public Address BillingAddress
    {
        get { return _billingAddress ?? (_billingAddress = new Address(Customer.Name, _domain, "BillingAddress")); }
    }
控制器只是创建一个新的空模型。该视图使用Html.EditorFor()显示不同的地址



好吧,我假设您的公共广播属性有set和get(上面没有显示)。一种方法是在用户取消选中“IsActive”时禁用地址编辑表单。然后使用jQuery验证选项
ignore:':disabled'
或者如果隐藏它们,
ignore:':hidden'
。请查看使用以下内容的示例:

从这个问题:


好吧,我假设您的公共广播属性既有set也有get(上面没有显示)。一种方法是在用户取消选中“IsActive”时禁用地址编辑表单。然后使用jQuery验证选项
ignore:':disabled'
或者如果隐藏它们,
ignore:':hidden'
。请查看使用以下内容的示例:

从这个问题:


您能发布您的(或简化的)模型和控制器吗?我猜验证会阻止子对象的创建,因此会有条件地进行验证,但我们的工作有点盲目。我将模型的主要部分发布为编辑。控制器除了传递ViewModel之外,实际上什么都不做……您可以发布您的(或简化的)模型和控制器吗?我猜验证会阻止子对象的创建,因此会有条件地进行验证,但我们的工作有点盲目。我将模型的主要部分发布为编辑。控制器除了传递ViewModel之外,实际上什么都不做……非常感谢,这就是我需要解决问题的想法。不能完全那样做,因为我不是自己做validate(),而是将condition-validation.js更改为验证隐藏div中没有的属性。是的,理想情况下,服务器端验证与客户端一起进行。。。如果您发现这部分代码有什么问题,请告诉我们。服务器端工作正常,没有对上述代码进行任何更改。最重要的更改是使用EditorTemplates而不是自己编写,然后将conditional-validation.js更改为以下内容:$.validator.addMethod('requiredif',函数(值、元素、参数){var containerId='#'+参数['dependentproperty'].split('u')[0];if($(containerId.css('display')!='none'))return$.validator.methods.required.call(this、value、元素、参数);return true;});非常感谢,这就是我解决问题所需要的想法。不能完全那样做,因为我不是自己做validate(),而是将condition-validation.js更改为验证隐藏div中没有的属性。是的,理想情况下,服务器端验证与客户端一起进行。。。如果您发现这部分代码有什么问题,请告诉我们。服务器端工作正常,没有对上述代码进行任何更改。最重要的更改是使用EditorTemplates而不是自己编写,然后将conditional-validation.js更改为以下内容:$.validator.addMethod('requiredif',函数(值、元素、参数){var containerId='#'+参数['dependentproperty'].split('u')[0];if($(containerId.css('display')!='none'))return$.validator.methods.required.call(this、value、元素、参数);return true;});