ASP.NET MVC。是否可以使用 MVC Foolproof Validation 进行数组验证?

问题描述 投票:0回答:2

例如我有以下型号:

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"

有什么办法可以解决这个问题吗?

c# asp.net asp.net-mvc validation foolproof-validation
2个回答
0
投票

您是否已在视图或母版页中包含 mvcfoolproof.unobtrusive.min.js ? 您是否在代码使用脚本之前检查过该脚本是否已加载?

在我的 Foolproof Nuget 安装中,它被放置在 Foolproof Nuget 安装中的“客户端脚本”文件夹中。


0
投票

我知道这篇文章很旧,但我正在追踪我在数组中使用万无一失的问题,所以我更深入地了解了它的内部工作原理。

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。

© www.soinside.com 2019 - 2024. All rights reserved.