首页 > 解决方案 > 如何使用 ASP.NET Core 中的自定义验证在索引处获取属性?

问题描述

我的 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 为空。如何在保留唯一名称属性的同时验证字段?如果我删除唯一名称,它可以正常工作,但是当发生验证错误时,它会针对所有相同的字段显示,因为名称与 asp-for 相同。

谢谢,

标签: c#asp.netasp.net-corerazor

解决方案


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

推荐阅读