ASP.Net MVC 6 PartialView模型绑定混淆

时间:2016-02-16 12:29:09

标签: asp.net-core-mvc

背景 我们需要提交带项目的模型。为此,我们制作了这个复杂的模型:

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 树。但我们无法看到这些项目的价值。

1 个答案:

答案 0 :(得分:5)

我发现问题是 CreatePayment.cshtml (感谢来自MVC社区的人们)。调用局部视图时,它不提供有关 spItem 表达式的任何信息。

Custom  Treeview

您可以在https://github.com/aspnet/Mvc/issues/4106

找到完整说明