gpt4 book ai didi

ajax - ViewModel 是否支持嵌套模型?虚拟属性可以应用于 viewModel 吗?

转载 作者:行者123 更新时间:2023-12-01 04:58:49 25 4
gpt4 key购买 nike

我正在使用 .net 4.5.1,Visual Studio 2013。
我使用 ViewModel -CreateInvoiceViewModel 创建了一个发票创建页面。

public class CreateInvoiceViewModel
{
public int EntityID { get; set; }
.
.
public ICollection<InvoicePartialCreateMainBillViewModel> MainBill { get; set; }

public ICollection<InvoicePartialCreateDetailBillViewModel> DetailBill { get; set; }
}

单击“生成发票”后,通过 AJAX,将在与 ViewModel 相同的页面中加载部分 View 页面,其中嵌套了两个 View 模型。
嵌套 View 模型在 AJAX 调用函数中给出数据。
部分 View 页面 ViewModel - InvoicePartialCreateViewModel
public class InvoicePartialCreateViewModel
{
public InvoicePartialCreateViewModel()
{
this.MainBill = new HashSet<InvoicePartialCreateMainBillViewModel>();
this.DetailBill = new HashSet<InvoicePartialCreateDetailBillViewModel>();
}
public float TotalAmount { get; set; }
.
.
public ICollection<InvoicePartialCreateMainBillViewModel> MainBill { get; set; }

public ICollection<InvoicePartialCreateDetailBillViewModel> DetailBill { get; set; }

internal void CreateMainBill(int count)
{
for(int i = 0; i < count; i++)
{
this.MainBill.Add(new InvoicePartialCreateMainBillViewModel());
}
}
internal void CreateDetailBill(int count)
{
for (int i = 0; i < count; i++)
{
this.DetailBill.Add(new InvoicePartialCreateDetailBillViewModel());
}
}
}

嵌套模型 - InvoicePartialCreateMainBillViewModel、InvoicePartialCreateDetailBillViewModel
public class InvoicePartialCreateMainBillViewModel
{
public string PackageName { get; set; }
.
.
public virtual InvoicePartialCreateViewModel InvoiceCreate { get; set; }
}

public class InvoicePartialCreateDetailBillViewModel
{
public DateTime OrderDate { get; set; }
.
.
public virtual InvoicePartialCreateViewModel InvoiceCreate { get; set; }
}

嵌套模型由 html helper @Html.EditorFor 调用
@Html.EditorFor(model => model.MainBill)
@Html.EditorFor(model => model.DetailBill)

局部 View 部分呈现。嵌套模型未渲染。
ViewModel 是否支持嵌套模型并且可以将虚拟属性应用于 viewModel

最佳答案

  • Viewmodel 确实支持嵌套模型。
  • 虽然不建议在 ViewModel 中使用 virtual。

    公共(public)类 CreateInvoiceViewModel
    {
    公共(public) int EntityID { 获取;放; }
    public IList<InvoicePartialCreateMainBillViewModel> MainBill { get; set; }

    public IList<InvoicePartialCreateDetailBillViewModel> DetailBill { get; set; }

    }

    虚拟通常与域对象一起使用,最终用于填充或映射 View 模型。

    虽然,它可能完全取决于您的情况。

    例如,您有一个具有属性 A 的基类,以及一个派生类 1 和派生类 2。两者都需要属性 A,但它们有自己的实现。然后,您可以根据要求将属性 A 保持为虚拟并在任一派生类中覆盖。

    前任:
    public class BaseViewModel
    {
    [Required]
    public virtual int propA { get; set;}
    }

    public class DerivedViewModel1
    {
    ......
    }

    public class DerivedViewMode2
    {
    public override int propA { get; set; }
    }

    在这种情况下,您可以使用虚拟,否则不推荐。
  • 关于ajax - ViewModel 是否支持嵌套模型?虚拟属性可以应用于 viewModel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720495/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com