代码之家  ›  专栏  ›  技术社区  ›  Igor

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

  •  1
  • Igor  · 技术社区  · 8 年前

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

    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,我们使用两个视图,一个是常规视图: 创建付款

    @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>
    

    另一部分: 拆分付款部分

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

    正如您所看到的,从第一个视图中,我们调用部分视图并从 拆分付款 列表

    意外行为 我们运行了代码,但意外的行为发生了: 每个局部视图绑定 付款 描述 窗体父级 付款视图模型 ,不是来自传递的项目?

    有人知道怎么了吗?

    每个视图在文件的开头定义模型。

    我们从控制器返回 付款视图模型 ,对于测试,有树 拆分付款视图模型 s、 但我们无法从项目中看到价值。

    1 回复  |  直到 8 年前
        1
  •  5
  •   JJS Joel Coehoorn    7 年前

    我发现问题是 创建付款.cshtml (感谢MVC社区的人们)。它没有提供关于 sp项目 调用局部视图时,表达式。

    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