【发布时间】:2020-01-11 13:30:18
【问题描述】:
在 Razor 页面(AspNetCore 2.2.0 NuGet 包)的循环中使用 InputTagHelper 时,我发现 data-val-* 属性仅在第一次迭代时生成。
下面的示例显示了一个基本模型,其中两个属性具有 [Required] 数据注释。 Razor 页面迭代集合并使用部分页面呈现标记。
为什么输出只有第一次迭代的 data-val-* 属性而不是第二次?
如何克服这个问题并让 InputTagHelper 生成属性?
页面
<form>
@for (int i = 0; i < Model.Tests.Count; i++)
{
<partial name="_Test" model="Model.Tests[i]" />
}
<input type="submit" value="Save" />
</form>
部分
@model TestModel.Test
<div>
<input asp-for="Index" id="Tests[@Model.Index]_Index" name="Tests[@Model.Index].Index" />
<input asp-for="Id" id="Tests[@Model.Index]_Id" name="Tests[@Model.Index].Id" />
<input asp-for="Name" id="Tests[@Model.Index]_Name" name="Tests[@Model.Index].Name" />
</div>
页面模型
public class TestModel : PageModel
{
public class Test
{
public int Index { get; set; }
[Required]
public int? Id { get; set; }
[Required]
public string Name { get; set; }
}
[BindProperty]
public List<Test> Tests { get; set; }
public void OnGet()
{
Tests = new List<Test>
{
new Test { Index = 0 },
new Test { Index = 1 }
};
}
}
输出
<form novalidate="novalidate">
<div>
<input id="Tests[0]_Index" name="Tests[0].Index" type="number" data-val="true" data-val-required="The Index field is required." value="0">
<input id="Tests[0]_Id" name="Tests[0].Id" type="number" data-val="true" data-val-required="The Id field is required." value="">
<input id="Tests[0]_Name" name="Tests[0].Name" type="text" data-val="true" data-val-required="The Name field is required." value="">
</div>
<div>
<input id="Tests[1]_Index" name="Tests[1].Index" type="number" value="1">
<input id="Tests[1]_Id" name="Tests[1].Id" type="number" value="">
<input id="Tests[1]_Name" name="Tests[1].Name" type="text" value="">
</div>
<input type="submit" value="Save">
</form>
【问题讨论】:
标签: validation asp.net-core razor-pages