我需要建议我需要做什么才能使以下两块代码可重用。我必须制作另一张资金表,而我这样做时,我想创建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
独立。
另外,我越想越想我的自我!任何想法或建议?谢谢
这看起来很有趣。我有点不确定如何实现它。我将不得不在组视图和公司视图中对RenderPartial进行指令,类似于: '<%= Html.RenderPartial(“FundTable”,Model)%>',但这必须以某种方式必须能够包括区分它们所需的逻辑。我怎么做? – DaveDev 2010-08-08 15:24:37
就在您做RenderPartial之前,为FundTable创建模型并将其传入: '<%FundTable ft = new FundTable(){ShowImage = f => YourLogicHere,Funds = Model.PageFunds}; %><%= Html.RenderPartial(“FundTable”,ft)%>' – jwsample 2010-08-08 19:03:37
谢谢你,这是做的。这正是我们在这个项目中需要的。我现在在两个地方使用FundsTable,第三个将在明天实施。我也可以通过解决方案全面应用这种变化。我们将鞭策这个项目的形状! – DaveDev 2010-08-08 20:35:44