背景 我们需要提交带项目的模型。为此,我们制作了这个复杂的模型:
public class PaymentViewModel
{
public decimal? Payment { get; set; }
public string Description { get; set; }
public List<SplittedPaymentViewModel> SplittedPayment { get; set; } = new List<SplittedPaymentViewModel>();
}
public class SplittedPaymentViewModel
{
public short SplittedPaymentId { get; set; }
public decimal? Payment { get; set; }
public string Description { get; set; }
}
对于渲染html,我们这两个视图,一个常规: CreatePayment
@model ZevApp.ViewModels.Record.PaymentViewModel
...
<input class="form-control" asp-for="Payment" type="number" />
<input class="form-control" asp-for="Description" />
...
<div class="panel-body" id="SplittedPayments">
@foreach (var spItem in Model.SplittedPayment)
{
@Html.Partial("SplittedPaymentPartial", spItem);
}
...
</div>
另一部分: SplittedPaymentPartial
@model ZevApp.ViewModels.Record.SplittedPaymentViewModel
...
<input class="form-control" asp-for="Payment" type="number" />
<input class="form-control" asp-for="Description" />
...
正如您所看到的,从第一个视图开始,我们调用部分视图并将项目从 SplittedPayment 列表中逐项传递。
出乎意料的行为 我们运行代码但出现意外行为: 每个部分视图绑定付款和描述形成父 PaymentViewModel ,而不是来自传递的项目?
有人知道出了什么问题吗?
每个视图在文件开头定义模型。
从控制器返回 PaymentViewModel ,对于测试,有 SplittedPaymentViewModel 树。但我们无法看到这些项目的价值。
答案 0 :(得分:5)
我发现问题是 CreatePayment.cshtml (感谢来自MVC社区的人们)。调用局部视图时,它不提供有关 spItem 表达式的任何信息。
Custom Treeview
找到完整说明