【发布时间】:2011-03-26 23:00:55
【问题描述】:
我需要关于如何使以下两个代码块可重用的建议。我必须生成另一个资金表,在此过程中,我想创建 FundsTable.ascx 部分视图,所有需要显示资金表的视图都可以使用。
// Inherits="System.Web.Mvc.ViewPage<CompanyViewModel> // this is a company
<%foreach (var fund in Model.PageFunds){%>
<% foreach (var shareClass in fund.ShareClasses) {%>
<tr class="shareclass">
<td>
// displays an image if the ViewModel's Company is not unlisted
<%= Html.TearsheetImage((Model.Company.ListingType != ListingType.UNLISTED))%>
</td>
</tr>
<% } }%>
和
// Inherits="System.Web.Mvc.ViewPage<GroupViewModel> // this is a group of companies
<%foreach (var fund in Model.PageFunds){%>
<% foreach (var shareClass in fund.ShareClasses) {%>
<tr class="shareclass">
<td>
// displays an image if any Company in the ViewModel's
// List<Company> is not unlisted
<%= Html.TearsheetImage(
(Model.Companies.WithCompanyId(fund.Company.Id) != ListingType.UNLISTED))%>
</td>
</tr>
<% } }%>
我认为我需要在某个地方抽象出这些差异,但我不确定该放在哪里。我应该在这里遵循任何经验法则吗?
CompanyViewModel 和GroupViewModel 是否都应该实现一个接口来决定该项目是否是未列出的?另外,我的 FundTable.ascx 应该是什么类型?我在想CompanyViewModel 和GroupViewModel 都可以扩展FundViewModel(或其他东西),我可以将FundTable 设为ViewUserControl<FundViewModel>,但我认为这不会起作用,因为需要确定是否显示图像的功能需要独立来自CompanyViewModel & GroupViewModel。
另外,我想得越多,我就越自欺欺人!有什么想法或建议吗?谢谢
【问题讨论】:
标签: c# asp.net-mvc partial-views abstraction code-reuse