首页 > 解决方案 > 复杂类中列表项的Asp.net mvc自定义验证

问题描述

我在视图中显示带有详细信息的记录(使用 asp.net mvc)。用户必须输入序列号并回发视图。我想检查用户是否犯了错误,并且所有序列号在详细列表中都是唯一的。如果序列号被意外插入两次,我想向用户指出包含这些重复序列号的确切字段。

我有这些类(它们更复杂):

public class Record 
{
    public long ID { get; set; }
    public List<Detail> Details { get; set; }
}

public class Detail
{
    public long ID { get; set; }
    public string SerialNo { get; set; }
}

我尝试使用自定义验证属性,但我无法从详细视图内部访问整个列表来检查这是否是唯一的序列号。

如果我在 Record 类中的 Details 上使用验证属性,

[SerialNoShouldBeUnique]
public List<Detail> Details { get; set; } 

我可以检查事实并向用户表明存在重复,但我不能准确地将这些细节标记为错误的。
我找到了验证整个详细信息列表并遍历元素并使用 Detail[i] 索引添加验证错误的地方,但是我使用这种类型的项目索引在视图中显示详细信息,因此我无法轻松访问这些索引。

我可以在控制器操作中检查这些序列号。如果我找到重复项,遍历 ModelState,找到 Details[aa..-..xx].SerialNo 的那些键并手动添加错误。但我不喜欢这种方法,最好使用验证(服务器端)。

标签: asp.net-mvc

解决方案


推荐阅读