我们有一个使用不同区域组织的ASP.net MVC应用程序。我们正在添加跨区域使用的新功能,并且我们希望在不同区域中重复使用一些视图模型以实现该功能。
我们在考虑某些“共享文件夹”中的BaseViewModel和BaseViewModel构建器类,然后在每个Area中实现子类。
这是一个好方法吗?是否有任何准则可以在ASP.net MVC的区域之间共享代码?
答案 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)