在ASP.net MVC区域之间共享代码

时间:2018-08-01 09:52:30

标签: c# .net asp.net-mvc

我们有一个使用不同区域组织的ASP.net MVC应用程序。我们正在添加跨区域使用的新功能,并且我们希望在不同区域中重复使用一些视图模型以实现该功能。

我们在考虑某些“共享文件夹”中的BaseViewModel和BaseViewModel构建器类,然后在每个Area中实现子类。

这是一个好方法吗?是否有任何准则可以在ASP.net MVC的区域之间共享代码?

1 个答案:

答案 0 :(得分:2)

您的方法听起来很合理。

在我们的项目中,{Project Root}\Models中有共享的ViewModel,{Project Root}\Views\Shared中有相应的* .cshtml文件。

特定于区域的ViewModel位于{Project Root}\Areas\{Area}\Models中,其视图位于{Project Root}\Areas\{Area}\Views中。

作为旁注,我不会介绍BaseViewModel。最好使用composition over inheritance,这将使维护更加容易。如果需要在不同的页面上显示公共数据,请为这些公共数据引入共享的ViewModel和Partial Views,然后将Sub-ViewModels添加到页面的ViewModels中,并使用@Html.PartialFor()进行渲染。这是一个组成示例:

public class Models.PatientOverviewViewModel {
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

public class Areas.Patient.Models.PatientDetailsViewModel {
    public PatientOverviewViewModel Overview { get; set; }
    public string MobilePhone { get; set; }
}

〜\ Areas \ Patient \ Views \ PatientDetails.cshtml:

@model Areas.Patient.Models.PatientDetailsViewModel
@Html.Partial("_PatientOverview", Model.Overview)
@Html.DisplayFor(m => m.MobilePhone)

〜\ Views \ Shared_PatientOverview.cshtml:

@model Models.PatientOverviewViewModel
@Html.DisplayFor(m => m.Name)
@Html.DisplayFor(m => m.BirthDate)