gpt4 book ai didi

c# - 为什么我的绑定(bind) List 使用 foreach 循环返回空以在 razor 页面上显示值?

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:23 25 4
gpt4 key购买 nike

在我的 Razor 页面 PageModel 中,我有一个绑定(bind) List<T>属性:

[BindProperty]
public List<JobCard> CustomerSpecificJobCards { get; set; }

这是 JobCard 模型:

public partial class JobCard
{
public int JobCardId { get; set; }
public string Products { get; set; }
public string CusCode { get; set; }
public string Category { get; set; }
public bool IsAssigned { get; set; }
}

列表JobCards在用户从页面发布订单号后填充:

CustomerSpecificJobCards = AllJobCards.Where(jc => jc.CusCode == WorkOrderInfo.MarkForCusCode).ToList();

然后通过 foreach 以表格形式显示在 Razor 页面上循环:

@foreach (var card in Model.CustomerSpecificJobCards)
{
<div class="col-1"><input asp-for="@card.IsAssigned" /></div>
<div class="col-9">@card.Products</div>
<div class="col-2">@card.JobCardId</div>
}

用户会看到工作卡列表和一个复选框。检查后,用户提交选择。当我查看 CustomerSpecificJobCards已发布,列表为空。为什么?基于information here , 我决定更改 foreach循环到 for循环:

@for (var card = 0; card < Model.CustomerSpecificJobCards.Count; card++)
{
<div class="col-1"><input asp-for="@Model.CustomerSpecificJobCards[card].IsAssigned" /></div>
<div class="col-9">@Model.CustomerSpecificJobCards[card].Products</div>
<div class="col-2">@Model.CustomerSpecificJobCards[card].JobCardId</div>
}

[编辑] 最初,我认为所有值都是使用 for 返回的循环,但结果只有 .IsAssigned返回值... ProductsJobCardId是空的。我是第一次使用 Razor Pages。我做错了什么?

[跟进] 看完Rafalon的回答后,我found this explanation在 for 或 foreach 循环中使用复选框绑定(bind)复杂集合。另外,这是另一个 excellent related link on data binding .

最佳答案

简短的回答:检查为 forforeach 生成的 HTML,你会发现对于 foreach,你不能指望表单以正确返回 List(使用 asp-for 帮助程序)。

for 是必需的,因此您可以获得可索引的输入,如下所示:

<input name='CustomerSpecificJobCards[0].IsAssigned'
id='CustomerSpecificJobCards_0__IsAssigned' />

你仍然可以使用 foreach 来完成它,但是如果没有 asp-for 它会非常乏味,并且你的模型必须满足一些要求(例如具有索引属性) .


您的其他问题来自于 @Model.CustomerSpecificJobCards[card].Products 仅为文本这一事实。

因此,您应该将其替换为 input,就像 IsAssigned 一样,或者您可以添加一个隐藏的输入:

<input type="hidden" asp-for="Model.CustomerSpecificJobCards[card].Products" />

同样适用于 JobCardId

关于c# - 为什么我的绑定(bind) List<T> 使用 foreach 循环返回空以在 razor 页面上显示值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com