必需如果使用子实体进行验证

时间:2011-05-19 11:44:33

标签: jquery validation asp.net-mvc-3

我试图让我的MVC3应用程序显示RequiredIfs的验证消息,使用此处的属性: http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx 现在它可以正常工作,如果没有子实体,但我有一个用户,并且需要验证用户地址对象。实际上,即使一个地址也可以使用,但有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所依赖的所有可能复选框时有效。以下内容验证所有addesses并在视图上输出消息:

$.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()显示不同的地址。


1 个答案:

答案 0 :(得分:1)

好吧,我假设你的公共地址属性有set和get(上面没有显示)。一种方法是在用户取消选中“IsActive”时禁用地址编辑表单。然后使用ignore: ':disabled'的jQuery验证选项或隐藏它们ignore: ':hidden'。看看这个使用它的样本:

http://jsfiddle.net/2EfPZ/21/

从这个问题:

Getting an error when trying to validate fields that depend on another option using jQuery Validate plug-in