背景 我们需要提交带有项目的模型.为此,我们制作了这个复杂的模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
对于渲染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>
Run Code Online (Sandbox Code Playgroud)
而另一部分:SplittedPaymentPartial
@model ZevApp.ViewModels.Record.SplittedPaymentViewModel
...
<input class="form-control" asp-for="Payment" type="number" />
<input class="form-control" asp-for="Description" />
...
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,从第一个视图中,我们调用部分视图并将它们逐项传递给SplittedPayment列表.
意外行为 我们运行代码但出现意外行为:每个局部视图绑定付款和描述表单父PaymentViewModel,而不是来自传递的项目?
有人知道出了什么问题吗?
每个视图定义文件开头的模型.
从控制器我们返回PaymentViewModel,并且对于测试,有树SplittedPaymentViewModel.但我们无法看到物品的价值.
我发现问题是CreatePayment.cshtml(感谢来自MVC社区的人).调用局部视图时,它不提供有关spItem表达式的任何信息.
var savePrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
for (var i = 0; i < Model.SplittedPayment.Count; i++)
{
ViewData.TemplateInfo.HtmlFieldPrefix = Html.NameFor(m => m.SplittedPayment[i]);
var spItem = Model.SplittedPayment[i];
@Html.Partial("SplittedPaymentPartial", spItem);
ViewData.TemplateInfo.HtmlFieldPrefix = savePrefix;
}
Run Code Online (Sandbox Code Playgroud)
您可以在https://github.com/aspnet/Mvc/issues/4106上找到完整的说明
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |