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

时间:2019-06-21 09:14:42

标签: 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)">
}

AllTable是模型,RefNumber是属性

我还有一个自定义验证类,可使用此类来验证文本框的值:

var refNumber = (string)validationContext.ObjectType.GetProperty(validationContext.MemberName).GetValue(validationContext.ObjectInstance, null);

就目前而言,refNumber为null。如何在保留唯一名称属性的同时验证字段?如果我删除了唯一名称,则可以正常工作,但是当发生验证错误时,它将针对所有相同字段显示,因为名称与asp-for相同。

谢谢

1 个答案:

答案 0 :(得分:1)

因为这是一个剃须刀页面,您将无法从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)">