我需要建议,了解如何使以下两个代码块可重复使用。我必须生成另一个基金表,同时,我想创建一个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
。
另外,我越想越混乱!有任何想法或建议吗?谢谢
<%= Html.RenderPartial("FundTable", Model) %>
,但是这将需要包含区分它们所需的逻辑。我该怎么做呢? - DaveDev<% FundTable ft = new FundTable() {ShowImage = f=> YourLogicHere, Funds = Model.PageFunds}; %> <%= Html.RenderPartial("FundTable", ft) %>
- jwsample