首页 > 解决方案 > 在嵌套循环中使用 asp-for 进行数据绑定

问题描述

我的网站上有几个带有输入列表的块

<div id="MainClaimsBlock">
    @await Html.PartialAsync("UserClaimsBlock", Model.FirstClaimModel)
    @await Html.PartialAsync("UserClaimsBlock", Model.SecondClaimModel)
    @await Html.PartialAsync("UserClaimsBlock", Model.ThirdClaimModel)
    @await Html.PartialAsync("UserClaimsBlock", Model.FourthClaimModel)
</div>

在每个局部视图中,我都有类似的东西(原始 100 多行。)

for (var i = 0; i < Model.Length; i++)
    {
        <div class="custom-control custom-switch">
            <input type="checkbox" asp-for="@Model.Categories[i].Selected">
            <label asp-for="@Model.Categories[i].Selected">@Model.Categories[i].Name</label>
        </div>
    }

问题是我无法保存这些部分视图中的值,因为asp-for提供了重复的 id 和部分视图中列表的属性。

id="Model_SubCategories_6__Selected"

您如何区分一个局部视图的 Id 与另一个?

标签: c#asp.net.netrazor

解决方案


哇,从Chris Pratt的问题中很快找到了解决方案

解决方案是在调用局部视图之前使用 ViewDataDictionary

@{
    var myViewData = new ViewDataDictionary(ViewData);
    myViewData.TemplateInfo.HtmlFieldPrefix = "Claims";
}

@await Html.PartialAsync("UserClaimsBlock", Model.SecondClaimModel, myViewData)

之后 asp-for 标记基于此前缀返回 id

id="Claims_Categories_2__Selected"

推荐阅读