Фон:
Я пытаюсь реализовать вкладку управления.Вкладки имеют следующий вид:
| Funds | Companies | Groups |
и реализованы следующим образом:
<ul class="ActionControl">
<li>
<%=Html.ActionLink(string.Format("Funds ({0})", Model.Summary.FundCount)
, "ResultsList", new {selectedTab = "Funds"} ) %>
</li>
// more tabs removed for brevity, one <li> for each
</ul>
Каждая вкладка представляет собой ссылку на метод действия, который определяется как:
public PartialViewResult ResultsList(SearchViewModel search)
{
var result = new SearchViewModel
{
Summary = _entitySearchService.GetSearchDataSummary(search.SearchExpression),
PagedFunds = _fundService.GetPagedEntitiesByName<Fund>(10, search.SearchExpression),
PagedCompanies = _companyService.GetPagedEntitiesByName<Company>(10, search.SearchExpression),
PagedGroups = _groupService.GetPagedEntitiesByName<CompanyGroupInfo>(10, search.SearchExpression)
};
}
Это работает, но это не правильно, потому что я хочу вернуть данные только для той вкладки, на которую нажали.Я могу сделать switch()
для значения, хранящегося в search.SelectedTab
, и заполнить только свойство, связанное с нажатой вкладкой, но это не так.
Кроме того, это представляет проблему в частичном представлении, потому что мне приходится различать вкладки, чтобы определить, какой из них я должен заполнить таблицу.В настоящее время так я бы заполнил панель результатов, если бы вы щелкнули по вкладке Фонды:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SearchViewModel>" %>
<% Html.RenderPartial("Tabs"); %>
<table>
<% foreach (var item in Model.PagedFunds) {%>
<tr>
<td><%= item.Name %></td>
</tr>
<% }%>
</table>
Для справки это SearchViewModel:
public class SearchViewModel
{
public string SearchExpression { get; set; }
public string SelectedTab { get; set; }
public SearchDataSummary Summary { get; set; }
public Paging<Fund> PagedFunds { get; set; }
public Paging<Company> PagedCompanies { get; set; }
public Paging<CompanyGroupInfo> PagedGroups { get; set; }
}
и подпись для подкачки:
public class Paging<T> : List<T> // contains functionality to manage paging and act like a List<T>
Вопрос:
Как мне лучше всего подойти к этой проблеме?
Должен ли я иметь отдельные методы действий для каждой вкладки?Таким образом, нажатие Funds
приводит к
public PartialViewResult Funds(SearchViewModel search)
и возвращает ViewUserControl<Paging<Fund>>
, а нажатие Companies
приводит к
public PartialViewResult Companies(SearchViewModel search)
и возвращает ViewUserControl<Paging<Company>>
В идеале я мог бы сохранить один метод действия ResultsView
и иметь более общий подход к возврату постраничных элементов.Я думаю, что это возможно, но я слишком увяз в деталях и не могу видеть древесину для деревьев.Может ли кто-нибудь указать мне подход?Спасибо