例如我有以下型号:
public class MyModel {
public Line[] Lines{get;set;}
}
public class Line {
public int Quantity{get;set;}
public int MaxQuantity{get;set;}
}
“Quantity”字段应小于“MaxQuantity”,因此我尝试使用“LessThanOrEqualTo”验证属性:
public class Line {
[LessThanOrEqualTo("MaxQuantity")]
public int Quantity{get;set;}
public int MaxQuantity{get;set;}
}
但它在客户端不起作用,因为我相信错误的依赖属性名称:
<input type="number" value="1" name="Lines[0].Quantity" data-val-is-passonnull="False" data-val-is-operator="LessThanOrEqualTo" data-val-is-dependentproperty="MaxQuantity" data-val-is="Quantity must be less than or equal to MaxQuantity." data-val="true">
<input type="hidden" value="1" name="Lines[0].MaxQuantity">
你可以看到“
data-val-is-dependentproperty="MaxQuantity"
”,但真正输入的名称是“Lines[0].MaxQuantity"
”
有什么办法可以解决这个问题吗?
您是否已在视图或母版页中包含 mvcfoolproof.unobtrusive.min.js ? 您是否在代码使用脚本之前检查过该脚本是否已加载?
在我的 Foolproof Nuget 安装中,它被放置在 Foolproof Nuget 安装中的“客户端脚本”文件夹中。
我知道这篇文章很旧,但我正在追踪我在数组中使用万无一失的问题,所以我更深入地了解了它的内部工作原理。
data-val-is-dependent 属性名称只需表示“MaxQuantity”即可。 Foolproof 在其客户端脚本中使用名为 getId() 的方法,通过解析比较元素的 id 来获取依赖元素的 id。
foolproof.getId = function (element, dependentPropety) {
var pos = element.id.lastIndexOf("_") + 1;
return element.id.substr(0, pos) + dependentPropety.replace(/\./g, "_");
};
根本问题是您渲染的 HTML 元素具有 name 属性,但没有 id 属性。
我的问题是,万无一失的日期正则表达式无法将
yyyy-MM-dd
格式识别为日期。通常这不会有问题,因为它是可排序的格式,但它试图与格式为 yyyy-MM-dd HH:MM:ss
的隐藏字段中的日期进行比较,因为 HiddenFor 不遵守 DisplayFormat.ApplyFormatInEditMode。