C# 如何在ASP.NET Core中使用自定义验证在索引处获取属性?

C# 如何在ASP.NET Core中使用自定义验证在索引处获取属性?,c#,asp.net,asp.net-core,razor,C#,Asp.net,Asp.net Core,Razor,我的Razor页面中有输入字段,这些字段是使用foreach循环加载的。例如: @foreach (var item in Model.DataList.Where(p => p.SubmittedBy == user.SubmittedBy)) { <input asp-for="AllTable.RefNumber" name="@item.Id" class="form-control" placeholder="Comments (optional)"> }

我的Razor页面中有输入字段,这些字段是使用foreach循环加载的。例如:

@foreach (var item in Model.DataList.Where(p => p.SubmittedBy == user.SubmittedBy))
{
    <input asp-for="AllTable.RefNumber" name="@item.Id" class="form-control" placeholder="Comments (optional)">
}
目前,refNumber为空。如何在保留唯一名称属性的同时验证字段?如果我删除了唯一名称,它可以正常工作,但是当发生验证错误时,它会针对所有相同的字段显示,因为asp for的名称相同


谢谢,

因为这是一个剃须刀页面,您将无法从ObjectInstance访问模型,因为我认为它当前不受支持,但传入的值将是您的列表对象

    var myList = value as ApprovedList;
    var refNames = myList.Select(s => s.RefName);
此外,从列表中添加输入的方式不允许它绑定到模型。应该是这样的

    <input asp-for="AllTable[i].RefNumber" class="form-control" placeholder="Comments (optional)">


需要澄清表格的更广泛范围。我很好奇为什么所有这些输入都会引用
asp for=“AllTable.RefNumber”
。澄清您实际试图执行的操作,以便知道该循环的上下文。您还可以包括此表单绑定到的模型。它用于表行数据,每行都有数据,下面是另一个带表单的表行。此表单保存ref编号输入,单击“批准”按钮时,将数据与其他隐藏字段一起保存到数据库,但需要先检查单独的数据库,以确保ref编号不存在。+1但我认为不需要第二行;您还不如直接执行显式强制转换并获得相同的结果。我可能会执行隐式强制转换,如果它为null,则返回false,因为它不是您期望的对象,因此它不可能有效。如果它不为null,则继续验证。如果我使用定义了列表的页面模型作为您的模型执行
var model=validationContext.ObjectInstance,它将返回null。我应该对RazorPage模型做些不同的事情吗?啊。我对razor页面做了一些尝试,我放弃使用razor视图和视图模型的原因之一是,在服务器端验证中无法访问模型,因此无法进行跨域验证。我修正了我的答案。
    <input asp-for="AllTable[i].RefNumber" class="form-control" placeholder="Comments (optional)">