我试图让我的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()显示不同的地址。
答案 0 :(得分:1)
好吧,我假设你的公共地址属性有set和get(上面没有显示)。一种方法是在用户取消选中“IsActive”时禁用地址编辑表单。然后使用ignore: ':disabled'
的jQuery验证选项或隐藏它们ignore: ':hidden'
。看看这个使用它的样本:
从这个问题: