ajax – ViewModel是否支持嵌套模型?虚拟财产可以应用于viewMod
我正在使用.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一起加载到同一页面中,ViewModel与另外两个View Models嵌套. 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) 部分视图部分呈现.嵌套模型未呈现. 解决方法
> Viewmodel支持嵌套模型.
>虽然不建议在ViewModel中使用虚拟. 公共类CreateInvoiceViewModel public IList<InvoicePartialCreateMainBillViewModel> MainBill { get; set; } public IList<InvoicePartialCreateDetailBillViewModel> DetailBill { get; set; } } Virtual通常与域对象一起使用,域对象最终用于填充或映射视图模型. 虽然,它可能完全取决于您的方案. 例如,您有一个具有属性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; } } 在这种情况下,您可以使用虚拟,否则不建议使用虚拟. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |