我需要建議我需要做什麼才能使以下兩塊代碼可重用。我必須製作另一張資金錶,而我這樣做時,我想創建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