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

伊戈尔

背景我们需要提交带有项目的模型。为此,我们建立了一个复杂的模型:

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>

而另一个Partial:SplittedPaymentPartial

@model ZevApp.ViewModels.Record.SplittedPaymentViewModel
...
<input class="form-control" asp-for="Payment" type="number" />
<input class="form-control" asp-for="Description" />
...

如您所见,从第一个视图开始,我们称为部分视图,并将它们逐项传递给SplittedPayment列表。

意外行为我们运行了代码,但是意外地发生了行为:每个局部视图都将PaymentDescription表单绑定Parent 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;
}

您可以在https://github.com/aspnet/Mvc/issues/4106上找到完整的描述

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC 6模型绑定到复杂集合-IList <T>

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

asp.net 5 MVC 6模型问题

来自分类Dev

如何在ASP NET MVC 6中更新模型?

来自分类Dev

Asp.NET MVC 6,TagHelper为模型本身“ asp-for”

来自分类Dev

什么是ASP.NET MVC 6功能?

来自分类Dev

ASP.NET MVC 6中的TryValidateModel

来自分类Dev

ASP.NET 在 mvc 6 项目中

来自分类Dev

使用ASP.NET MVC中“父”页面模型中的内容填充PartialView模型

来自分类Dev

带列表的ASP.NET MVC PartialView

来自分类Dev

ASP.NET MVC绑定到视图模型

来自分类Dev

Json和ASP.NET MVC模型绑定

来自分类Dev

使用GET的ASP.Net MVC模型绑定复杂对象

来自分类Dev

ASP.NET MVC 5模型绑定编辑视图

来自分类Dev

$ http发布不与asp.net MVC模型绑定

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC Partiel视图模型绑定

来自分类Dev

JSON的ASP.NET MVC 4递归模型绑定

来自分类Dev

ASP.NET MVC 5模型绑定不起作用

来自分类Dev

绑定[Serializable]类的ASP.Net MVC模型

来自分类Dev

ASP.NET MVC模型绑定派生类

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

什么是ASP.NET MVC中的模型绑定?

来自分类Dev

ASP.NET MVC模型绑定未解析

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC:模型绑定中的类型转换

来自分类Dev

ASP.Net MVC模型绑定程序-忽略属性

来自分类Dev

ASP.NET MVC模型绑定资源序列